【问题标题】:SQL Select where NOT matching specific selectionSQL 选择与特定选择不匹配的地方
【发布时间】:2013-11-12 19:50:03
【问题描述】:

我一直在使用以下 SQL:

SELECT DISTINCT NAME
FROM Events t1
LEFT JOIN UserHistory t2 ON t1.Name = t2.Event
WHERE t2.Event IS NULL

从表 1 中选择表 2 为 Null 的所有行。这有效地过滤掉了表 2 有数据的所有表 1 数据。但是,我只想在表 2 中的列等于某个值时应用它。因此,我希望做一个SELECT * FROM t2 WHERE t2.ID = 1,但我不确定这如何适合这个查询。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    SELECT DISTINCT NAME
    FROM Events t1
    LEFT JOIN UserHistory t2 ON t1.Name = t2.Event and t2.certain_column = 1234
    WHERE t2.Event IS NULL
    

    【讨论】:

      【解决方案2】:

      您也可以尝试使用 NOT EXISTS 进行查询:

      SELECT DISTINCT NAME
      FROM Events t1
      WHERE NOT EXISTS(SELECT * FROM UserHistory t2 
                                WHERE t1.Name = t2.Event AND t2.ID = 1)
      

      【讨论】:

      【解决方案3】:

      您需要在 JOIN 条件中添加谓词:

      SELECT DISTINCT NAME
      FROM Events t1
      LEFT JOIN UserHistory t2 ON t1.Name = t2.Event AND t2.ID = 1
      WHERE t2.Event IS NULL;
      

      如果您将其添加到 WHERE,您实际上会将外连接变为内连接,这意味着不会返回任何行(因为 NULL = 1 的计算结果为 false)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-04
        • 2016-10-23
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        • 2019-04-18
        • 2018-03-17
        相关资源
        最近更新 更多