【问题标题】:Select rows that have not corresponding rows in (foreign key) table选择(外键)表中没有对应行的行
【发布时间】:2014-04-24 20:56:55
【问题描述】:

我有两个表说客户和订单,主键是 Customer.CustomerID,外键是 Order.CustomerID 我想选择所有尚未在 Android Sqlite 中下订单的客户这是我的查询

select * from Customer where not exists (select * from Customer  inner join Order on Customer.CustomerID = Order.CustomserID )

但它不起作用并返回 0 行。

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    您的子查询不是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)
    

    【讨论】:

    • 另一个问题为什么你使用(USING)我们可以像这样select * from PlannedVisits left join CheckedVisits on PlannedVisits.PvId = CheckedVisits.PvId where CheckedVisits.PvId is null重写这个查询,它会很好用
    猜你喜欢
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多