[DB/2] Doppelte Abfragebedingung für ein Attribut

AvS

Erfahrenes Mitglied
Hi,

ich habe folgende Tabelle :

orders
------------------------------------------
ordno month cid aid pid value dollars
------------------------------------------
1011 jan c001 a01 p01 1000 450.00
1012 jan c001 a01 p01 1000 450.00
1019 feb c001 a02 p02 400 180.00
1017 feb c001 a06 p03 600 540.00
1018 feb c001 a03 p04 600 540.00
1023 mar c001 a04 p05 500 450.00
1022 mar c001 a05 p06 400 720.00
1025 apr c001 a05 p07 800 720.00
1013 jan c002 a03 p03 1000 880.00
1026 may c002 a05 p03 800 704.00
1015 jan c003 a03 p05 1200 1104.00
1014 jan c003 a03 p05 1200 1104.00
1021 feb c004 a06 p01 1000 460.00
1016 jan c006 a01 p01 1000 500.00
1020 feb c006 a03 p07 600 600.00
1024 mar c006 a06 p01 800 400.00


Die Aufgabe besteht nun darin, alle CID's auszugeben, die sowohl "p07" als auch "p01" bestellt haben.
Mir ist dabei natürlich erstmal folgendes in den Sinn gekommen :

SELECT cid FROM orders as o WHERE o.pid='p01' AND o.pid='p07';

Diese Anfrage gab allerdings die leere Menge aus, ich weiß aber nicht wieso meine Abfrage falsch ist !
 
Die Abfrage die du an die DB stellst ist ein Widerspruch in sich.
Damit würdest du alle Zeilen selektieren bei der die Spalte pid 'p01' und zugleich 'p07' ist. Da 'p01' ungleich 'p07' kann es keine Zeile geben die das erfüllt.

Du musst mit der Schnittmenge arbeiten um 2 Ergebnismengen zu untersuchen:

SELECT cid FROM orders as o WHERE o.pid='p01'
INTERSECT
SELECT cid FROM orders as o1 WHERE o1.pid='p07'

Damit erhälst du die Schnittmenge der Menge "hat p01 bestellt" mit der Menge "hat p07 bestellt".
 
Zurück