选择(外键)表中没有对应行的行

时间:2014-04-22 23:19:50

标签: android sqlite

我有两个表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行。

1 个答案:

答案 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)