【问题标题】:Select From a Table Where the column value does not exist in another table [duplicate]从另一个表中不存在列值的表中选择[重复]
【发布时间】:2013-04-17 06:49:02
【问题描述】:
SELECT  Id, Name, Lastname
FROM customers AS c, Places AS p, 
WHERE c.customer_ID = p.customer_ID

我的问题是,我想阻止显示另一个表(阶段)中存在的行的查询结果

【问题讨论】:

  • 对不起标题,我想说如果存在
  • 使用IF NOT EXISTS() 构造或LEFT JOIN that other table ON your on clause WHERE some non-nullable column in other table IS NULL

标签: mysql sql


【解决方案1】:

您可以执行 LEFT JOIN 并检查是否为空。

SELECT  Id, Name, Lastname
FROM customers AS c LEFT JOIN Places AS p ON c.customer_ID = p.customer_ID
WHERE p.customer_ID IS NULL

【讨论】:

    【解决方案2】:

    添加

    and not exists
    (subquery to select your exclusions)
    

    到您的查询

    【讨论】:

    • 非常感谢,很有用
    • 嘿!对不起,我是新手。结果是相反的,我希望阻止显示该行的查询结果,如果存在于另一个表中。
    【解决方案3】:

    我想你想要这样的东西:

    SELECT Id, Name, Lastname FROM customers, WHERE customer_ID NOT IN (SELECT customer_ID FROM Places)

    【讨论】:

    • 对于大型数据集,not in 很慢。
    • 你是对的。再想一想,很明显 NOT EXISTS 必须更快。它可以在找到一条记录时停止,而我的应该检查 NOT IN (...) 部分中的所有记录。
    【解决方案4】:

    你可以使用:

    SELECT  Id, Name, Lastname
    FROM customers AS c JOIN Places AS p USING(customer_ID)
    

    这是您可以使用in/exists 更快的方式。

    【讨论】:

    • MySQL 是否支持 using 关键字?
    • 你指的是什么关键字?
    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2012-10-29
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多