如何在mysql中正确使用exists运算符?

时间:2014-04-22 00:13:27

标签: mysql sql subquery exists

我希望EXISTS运营商列出没有订单的客户名称

所以我有两个表(如下所示)一个名为Customer,其中包含CustomerName和CustomerID,另一个命名的订单包含CustomerID和OrderID。我试图

SELECT CustomerName,CustomerID 来自客户 在哪里(

SELECT CustomerID,OrderID 来自订单 在哪里订单ID<> CustomerID);

但它没有按照我想要的方式工作。

2 个答案:

答案 0 :(得分:1)

您可以通过使用NOT EXISTS语法来实现此目的。就个人而言,这对我来说更有意义。我认为这个查询对你有用:

Select CustomerName
, CustomerID 
FROM Customer C 
WHERE NOT EXISTS(Select 1 FROM Orders O where C.CustomerId = O.CustomerId)

答案 1 :(得分:1)

" NOT EXISTS"是一个声名狼借的表演者(除非MySQL已经为它做了某种优化),因为如果强制进行全表扫描。

标准解决方法是使用外连接。不直观,因此应该对未来的维护者进行评论。

SELECT CustomerName, CustomerID from Customer C LEFT JOIN Orders O ON C.CustomerID = O.CustomerID WHERE O.CustomerID IS NULL