我有两个MySQL表,每个表一列。我想选择第二个表中第一个表中不存在的条目。
我尝试了以下查询,但似乎不起作用
SELECT column_name FROM `table_name_1`
WHERE NOT EXISTS (SELECT column_name FROM `table_name_2`);
例如: table_name_1
column
111111111111
222222222222
333333333333
444444444444
table_name_2
column
222222222222
333333333333
555555555555
666666666666
现在,我只想在table_name_2中获得55555555555和66666666666条目。
答案 0 :(得分:2)
您可以简单地从表2到表1 Left Join
并获取所有唯一值,这些值对应于表1中不存在匹配项的所有值(t1.column_name is null
)>
此外,请注意,为了提高性能,您需要在各自表的两列上都使用索引。
请尝试以下操作:
SELECT DISTINCT t2.column_name
FROM table_name_2 AS t2
LEFT JOIN table_name_1 AS t1 ON t1.column_name = t2.column_name
WHERE t1.column_name IS NULL
注意,如果列值被限制为唯一(PK或唯一约束),或者您不在乎是否出现重复值,则可以删除DISTINCT
关键字在上述查询中使用。
结果:
| column_name |
| ------------ |
| 555555555555 |
| 666666666666 |
答案 1 :(得分:0)
您的查询应与此一起使用。 Check fiddle
SELECT DISTINCT column_name
FROM table_name_2
WHERE column_name NOT IN (SELECT column_name
FROM table_name_1);
答案 2 :(得分:0)
因此需要第二个表中的一些记录。
然后,第二个表必须在外部查询中。
(NOT)EXISTS标准与(NOT)IN不同。
使用EXISTS时,需要在EXISTS内部添加EXISTS中的查询与外部查询之间的关系。
SELECT DISTINCT column_name
FROM `table_name_2` AS t2
WHERE NOT EXISTS (
SELECT 1
FROM `table_name_1` AS t1
WHERE t1.column_name = t2.column_name
);
SqlFiddle测试here