【发布时间】:2017-09-17 10:01:24
【问题描述】:
此查询未显示正确结果。它显示了所有的 CustomerId。
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);
上面的结果是
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总是正确的。相反,可能是:customer.customerid = o.customerid,因此您将外部查询客户表与内部查询的o表进行比较。 -
c.CUSTOMERID=o.CUSTOMERID 部分上的内联订单o 涵盖 customer.customerid = o.customerid 部分。所以结果是一样的。当我去掉 " and o.customerid = o.customerid" 部分时,结果是一样的。不过谢谢!
标签: sql oracle subquery inner-join exists