SQL选择不匹配特定选择的位置

时间:2013-11-12 11:27:42

标签: mysql sql

我一直在使用以下SQL:

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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)

答案 2 :(得分:1)

您需要将谓词添加到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)