Hab die Aufgabe jetzt versucht mit folgenden SQL Anweisung zu lösen:
SELECT cid FROM orders WHERE pid =ALL (SELECT pid from products)
Also mit dem Subquery wähle ich alle produkte aus die es gibt(Hab also die Menge von Produkte…)
Und dann vergleich ich halt die einzelnen Elemente aus der Relation “orders” mit =ALL…
Jetzt müsste der doch jedes Element mit der Menge vergleichen und dann die jeweilige cid ausgeben…aber macht der nicht…
vllt. bin ich ja auch völlig auf den falschen weg aber komm da jetzt gar net mehr weiter und bin schon am verzweifeln -_-
Vllt. weiss ja jemand von euch rat, wäre sehr dankbar!!
wie mit create table erklären? weiss jetzt gerade nicht was du meinst
postgreSQL?!? gibts da unterschiede hab da jetzt gar net so darauf geachtet -_-
fals es nicht das selbe is dann bin ich hier glaub ich sowieso falsch
test=# create table produkte (pid serial primary key, name text);
NOTICE: CREATE TABLE will create implicit sequence "produkte_pid_seq" for serial column "produkte.pid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "produkte_pkey" for table "produkte"
CREATE TABLE
Time: 22,619 ms
test=*# copy produkte(name) from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> prod1
>> prod2
>> prod3
>> \.
Time: 7301,329 ms
Sowas halt.
postgreSQL?!? gibts da unterschiede hab da jetzt gar net so darauf geachtet -_-
fals es nicht das selbe is dann bin ich hier glaub ich sowieso falsch
hab jetzt nur SQL gelesen^^
Unterschiede gibt es da sehr wohl, aber auch einen gemeinsammen Nenner. Möglicherweise wird Dir hier jemand eine Lösung zeigen, die für Dich nicht funktioniert.
test=*# select kid, array_accum(pid) as produkte from umsatz group by 1 having array_accum(pid)=ARRAY(SELECT pid FROM produkte);
kid | produkte
-----+----------
1 | {1,2,3}
(1 row)
Wir wir sehen, erfüllt Kunde mit kid=1 die Bedingung, alle Produkte gekauft zu haben.
Nachtrag: man muß aufpassen bei dieser Lösung, wenn Kunden einen Artikel mehrfach gekauft haben, und auch das die id-werte in den Arrays jeweils sortiert sind, damit diese verglichen werden können. Aber das ist auch nur eine kleine Änderung am SQL…
test=*# select kid, array_accum(pid) as produkte from (SELECT DISTINCT umsatz.pid, umsatz.kid FROM umsatz ORDER BY umsatz.pid, umsatz.kid) umsatz_distinct group by 1 having array_accum(pid)=ARRAY(SELECT pid FROM produkte order by pid);