比较两个MySQL表并在第二个表中选择不同的条目

时间:2018-11-01 10:59:39

标签: mysql mysql-workbench mysql-error-1064

我有两个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条目。

3 个答案:

答案 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 |

View on DB Fiddle

答案 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