이 쿼리가 올바른 결과를 표시하지 않습니다. 그것은 모든 CustomerId를 보여줍니다.SQL : 부속 조회의 다중 내부 조인
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);
상기 결과는 I가 상기 질의와 동일한 의미를 만들어
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
이다 해당 검색어가 올바른 결과를 나타낸다. 그것은 단지 products.CATEGORYID = 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;
올바른 결과를 구입 한 고객이
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
첫 번째 쿼리의 문제가 무엇이며, 그 결과는 보여줍니다?
'있는지 확인 EXISTS'가 하위 쿼리의 결과가 없습니다. 하위 쿼리는 적어도 하나의 고객이 해당 CategoryID에서 구입했기 때문에 레코드를 반환하므로 모든 레코드가 외부 쿼리에서 테스트를 통과합니다. 당신이'o.customerid = o.customerid'와 상관 관계가있는 부질의를하려고 시도한 것 같지만 말도 안됩니다. 'o.customerid = o.customerid'는 항상 true입니다. 대신에 :'customer.customerid = o.customerid' 그러면 외부 쿼리 고객 테이블을 내부 쿼리의'o' 테이블과 비교할 수 있습니다. – JNevill
내부 조인 오더는 c.CUSTOMERID = o.CUSTOMERID 부분은 customer.customerid = o.customerid 부분을 다룹니다. 결과는 같습니다. "and o.customerid = o.customerid"부분을 없애면 결과는 같습니다. 그래도 고마워! – vincnet