比较两个 MySQL 表和第二个表中的 select 个不同的条目

Compare two MySQL tables and select distinct entries in second one

我有两个 MySQL table,每个都有一列。我想要 select 第二个 table 中第一个中不存在的条目。

我尝试了以下查询,但似乎不起作用

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

您可以简单地 Left Join 从 table 2 到 table 1 并获得所有那些 unique 值,对应于不存在匹配项在 table 1 (t1.column_name is null)

此外,请注意,为了提高性能,您需要在各自的 table 中的两列上建立索引。

请尝试以下操作:

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

您的查询应该适用于此。 Check fiddle

SELECT DISTINCT column_name 
FROM   table_name_2 
WHERE  column_name NOT IN (SELECT column_name 
                           FROM   table_name_1); 

因此需要第二个 table 的一些记录。
然后第二个 table 必须在外部查询中。

(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