比较两个 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 |
您的查询应该适用于此。 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
我有两个 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 |
您的查询应该适用于此。 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