我有以下表架构:
Table 1
-
field1
Table 2
-
field1 | field2
我想做的是从第二个表中选择 field2,其中第二个表中的字段 1 在第一个表中不存在(field1)。
我有这个:
SELECT t2.field2
, t2.field1
FROM table1 t1
, table2 t2
WHERE t2.field1 != t1.field1
问题是,如果在表 1 中应用了多行,则此查询将从表 2 中检索多个重复信息。我添加了DISTINCT
和/或LIMIT
但它仍然不起作用。关于如何做到这一点的任何想法?
您可以使用子查询:
SELECT t2.field2, t2.field1 FROM table2 t2 WHERE t2.field1 NOT IN (SELECT t1.field1 FROM table1 t1);
这将为您提供table2
中具有不在table1
中的field1
的所有行。
现在可以对最外层的查询使用 DISTINCT
或 LIMIT
进行任何进一步处理。
您可以将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
你的问题的标题几乎是你需要的命令:"不存在"。SQL是如此简单。;)
SELECT DISTINCT t2.field2
FROM Table2 t2
WHERE NOT EXISTS (SELECT * FROM Table1 WHERE t1.field1 = t2.field1)