我有以下表格架构:
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
,但它仍无效。关于如何做到这一点的任何想法?
答案 0 :(得分:3)
您可以使用子查询:
SELECT t2.field2, t2.field1 FROM table2 t2 WHERE t2.field1 NOT IN (SELECT t1.field1 FROM table1 t1);
这将为您提供table2
中field1
不在table1
内的所有行。
现在,您可以在最外层的查询中使用DISTINCT
或LIMIT
进行进一步处理。
答案 1 :(得分:2)
您可以LEFT JOIN
与IS 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)