SELECT字段,其他表中没有其他字段

时间:2015-01-24 23:18:29

标签: mysql sql anti-join

我有以下表格架构:

Table 1
-
field1
Table 2
-
field1 | field2

我想要做的是从第二个表中选择 field2,其中第二个表中的 field1 在第一个表中不存在( field1 )。

我有这个:

SELECT t2.field2
     , t2.field1
FROM table1 t1
   , table2 t2
WHERE t2.field1 != t1.field1

问题是如果table1中有多行适用,此查询将从table2中检索多个重复信息。我添加了DISTINCT和/或LIMIT,但它仍无效。关于如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:3)

您可以使用子查询:

SELECT t2.field2, t2.field1 FROM table2 t2 WHERE t2.field1 NOT IN (SELECT t1.field1 FROM table1 t1);

这将为您提供table2field1不在table1内的所有行。

现在,您可以在最外层的查询中使用DISTINCTLIMIT进行进一步处理。

答案 1 :(得分:2)

您可以LEFT JOINIS NULL一起使用检查:

SELECT DISTINCT t2.field2
FROM table2 t2
LEFT JOIN table1 t1 ON t1.field1 = t2.field1
WHERE t1.field1 IS NULL

答案 2 :(得分:2)

你问题的标题几乎就是你需要的命令:'不存在'。 SQL非常简单。 ;)

SELECT DISTINCT t2.field2 
FROM Table2 t2
WHERE NOT EXISTS (SELECT * FROM Table1 WHERE t1.field1 = t2.field1)