我有两个表Say Customers and Orders,主键是Customer.CustomerID,外键是Order.CustomerID我想选择所有未在Android Sqlite中发出任何订单的客户这是我的查询
select * from Customer where not exists (select * from Customer inner join Order on Customer.CustomerID = Order.CustomserID )
但它不起作用并返回0行。
答案 0 :(得分:2)
您的子查询不是correlated subquery,即与外部查询无关。
(内部Customer
表完全独立于外部表。)
只要数据库中存在任何记录,外部Customer
表中每个记录的EXISTS子句都为真。
您想要检查一个特定的Customer
记录是否具有匹配的订单:
SELECT *
FROM Customer
WHERE NOT EXISTS (SELECT 1
FROM Order
WHERE CustomerID = Customer.CustomerID)
或者,执行两个表中的outer join,并检查哪些客户没有获得匹配的订单:
SELECT Customer.*
FROM Customer
LEFT JOIN Order USING (CustomerID)
WHERE Order.OrderID IS NULL
或者,只需获取不在订单表中的所有客户:
SELECT *
FROM Customer
WHERE CustomerID NOT IN (SELECT CustomerID
FROM Order)