Diese Abfrage zeigt nicht korrekt Ergebnis. Es zeigt alle CustomerId.SQL: mehrere innere Verknüpfung in Unterabfrage
select Customers.customerid, Customers.custfirstname, Customers.custlastname from customers
where exists (select * from customers c
inner join orders o on c.CUSTOMERID=o.CUSTOMERID
inner join ORDER_DETAILS od on o.ordernumber = od.ORDERNUMBER
inner join products on products.PRODUCTNUMBER= od.PRODUCTNUMBER
where products.CATEGORYID= 2 and o.customerid = o.customerid);
das obige Ergebnis ist
CUSTOMERID CUSTFIRSTNAME CUSTLASTNAME
---------- ------------------------- -------------------------
1001 Suzanne Viescas
1002 William Thompson
1003 Gary Hallmark
1004 Robert Brown
1005 Dean McCrae
1006 John Viescas
1007 Mariya Sergienko
1008 Neil Patterson
1009 Andrew Cencini
1010 Angel Kennedy
1011 Alaina Hallmark
1012 Liz Keyser
1013 Rachel Patterson
1014 Sam Abolrous
1015 Darren Gehring
1016 Jim Wilson
1017 Manuela Seidel
1018 David Smith
1019 Zachary Ehrlich
1020 Joyce Bonnicksen
1021 Estella Pundt
1022 Caleb Viescas
1023 Julia Schnebly
1024 Mark Rosales
1025 Maria Patterson
1026 Kirk DeGrasse
1027 Luke Patterson
1028 Jeffrey Tirekicker
28 rows selected
I gleiche Bedeutung der obigen Abfrage gemacht, diese Abfrage korrektes Ergebnis zeigt. Es zeigt das Ergebnis, dass der Kunde, der nur products.CATEGORYID gekauft = 2
select distinct c.customerid, c.custfirstname, c.custlastname from customers c
inner join orders o on o.customerid=c.CUSTOMERID
inner join ORDER_DETAILS od on od.ORDERNUMBER=o.ORDERNUMBER
inner join products p on p.PRODUCTNUMBER=od.productnumber
where p.CATEGORYID= 2
order by 1;
das richtige Ergebnis ist
CUSTOMERID CUSTFIRSTNAME CUSTLASTNAME
---------- ------------------------- -------------------------
1002 William Thompson
1004 Robert Brown
1005 Dean McCrae
1006 John Viescas
1007 Mariya Sergienko
1008 Neil Patterson
1009 Andrew Cencini
1010 Angel Kennedy
1011 Alaina Hallmark
1012 Liz Keyser
1013 Rachel Patterson
1014 Sam Abolrous
1016 Jim Wilson
1017 Manuela Seidel
1018 David Smith
1019 Zachary Ehrlich
1020 Joyce Bonnicksen
1021 Estella Pundt
1023 Julia Schnebly
1024 Mark Rosales
1025 Maria Patterson
1026 Kirk DeGrasse
1027 Luke Patterson
23 rows selected
was ist das Problem in der ersten Abfrage?
'EXISTS' wenn es überprüft, sind irgendwelche Ergebnisse in Ihrer Unterabfrage. Ihre Unterabfrage gibt Datensätze zurück, da mindestens ein Kunde in dieser CategoryID gekauft hat, sodass alle Datensätze den Test in der äußeren Abfrage bestehen. Es sieht so aus, als ob du versucht hast, eine korrelierte Unterabfrage mit der 'o.customerid = o.customerid' zu machen, aber das ist Unsinn. 'o.customerid = o.customerid' ist IMMER wahr. Stattdessen vielleicht: 'customer.customerid = o.customerid', so dass Sie die äußere Abfrage-Kundentabelle mit der 'o'-Tabelle der inneren Abfrage vergleichen. – JNevill
innere Join-Aufträge o auf c.CUSTOMERID = o.CUSTOMERID-Teil umfasst customer.customerid = o.customerid-Teil. Das Ergebnis ist also das gleiche. Wenn ich den Teil "und o.customerid = o.customerid" loswerde, ist das Ergebnis dasselbe. Trotzdem danke! – vincnet