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

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

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

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

例如:表\u name \u 1

  1. column
  2. 111111111111
  3. 222222222222
  4. 333333333333
  5. 444444444444

表\u名称\u 2

  1. column
  2. 222222222222
  3. 333333333333
  4. 555555555555
  5. 666666666666

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

cnwbcb6i

cnwbcb6i1#

所以需要第二个表中的一些记录。
那么第二个表必须在外部查询中。
(not)exists条件与中的(not)不同。
当使用exists时,exists中的查询和外部查询之间的关系需要添加到exists中。

  1. SELECT DISTINCT column_name
  2. FROM `table_name_2` AS t2
  3. WHERE NOT EXISTS (
  4. SELECT 1
  5. FROM `table_name_1` AS t1
  6. WHERE t1.column_name = t2.column_name
  7. );

SQLFIDLE测试

kkih6yb8

kkih6yb82#

你可以简单地 Left Join 从表2到表1,并获得所有那些唯一的值,对应于表1中不存在匹配的值( t1.column_name is null )
另外,请注意,为了提高性能,您需要对各自表中的两个列进行索引。
请尝试以下操作:

  1. SELECT DISTINCT t2.column_name
  2. FROM table_name_2 AS t2
  3. LEFT JOIN table_name_1 AS t1 ON t1.column_name = t2.column_name
  4. WHERE t1.column_name IS NULL

注意,如果列值被约束为唯一的(pk或unique约束),或者您不关心是否会产生重复的值,那么可以删除 DISTINCT 在上述查询中使用的关键字。
结果:

  1. | column_name |
  2. | ------------ |
  3. | 555555555555 |
  4. | 666666666666 |

db fiddle视图

展开查看全部
1tu0hz3e

1tu0hz3e3#

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

  1. SELECT DISTINCT column_name
  2. FROM table_name_2
  3. WHERE column_name NOT IN (SELECT column_name
  4. FROM table_name_1);

相关问题