2014-04-22 38 views
1

我有两个表说客户和订单,主键是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表是从外一个完全独立的。) 只要任何记录在数据库中存在时,EXISTS子句是用于在外Customer表中的每一记录真。

你要检查一个特定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) 
+0

完美的答案非常感谢 –

+0

为什么你使用(使用) 我们可以重写此查询这样 'SELECT * FROM PlannedVisits留在PlannedVisits.PvId = CheckedVisits.PvId其中CheckedVisits.PvId加入CheckedVisits另一个问题是空' ,它将工作得很好 –

+0

使用[是标准SQL](http://www.sqlite.org/lang_select.html#fromclause)。 –

相关问题