我希望EXISTS运营商列出没有订单的客户名称
所以我有两个表(如下所示)一个名为Customer,其中包含CustomerName和CustomerID,另一个命名的订单包含CustomerID和OrderID。我试图
SELECT CustomerName,CustomerID 来自客户 在哪里(
SELECT CustomerID,OrderID 来自订单 在哪里订单ID<> CustomerID);
但它没有按照我想要的方式工作。
答案 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