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

btxsgosb  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(336)

我有两个mysql表,每个表中有一列。我想在第二个表中选择第一个表中不存在的条目。
我尝试了下面的查询,但似乎不起作用

SELECT column_name FROM `table_name_1` 
WHERE NOT EXISTS (SELECT column_name FROM `table_name_2`);

例如:表\u name \u 1

column 
111111111111
222222222222
333333333333
444444444444

表\u名称\u 2

column
222222222222
333333333333
555555555555
666666666666

现在,我只想得到表\u name\u 2中的555和666个条目。

cnwbcb6i

cnwbcb6i1#

所以需要第二个表中的一些记录。
那么第二个表必须在外部查询中。
(not)exists条件与中的(not)不同。
当使用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
);

SQLFIDLE测试

kkih6yb8

kkih6yb82#

你可以简单地 Left Join 从表2到表1,并获得所有那些唯一的值,对应于表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或unique约束),或者您不关心是否会产生重复的值,那么可以删除 DISTINCT 在上述查询中使用的关键字。
结果:

| column_name  |
| ------------ |
| 555555555555 |
| 666666666666 |

db fiddle视图

1tu0hz3e

1tu0hz3e3#

你的查询应该可以处理这个。检查小提琴

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

相关问题