【发布时间】:2018-01-23 15:10:50
【问题描述】:
我在 MySQL 数据库中有 2 个完全相同的简单表,其中包含不同的数据。我需要一个查询来返回所有不重复的结果。
这是一个例子:
表 1.(“项目”列)
a
b
c
d
表 2.(“项目”列)
a
b
e
f
x
想要的结果
c
d
e
f
x
【问题讨论】:
标签: mysql join duplicates outer-join
我在 MySQL 数据库中有 2 个完全相同的简单表,其中包含不同的数据。我需要一个查询来返回所有不重复的结果。
这是一个例子:
表 1.(“项目”列)
a
b
c
d
表 2.(“项目”列)
a
b
e
f
x
想要的结果
c
d
e
f
x
【问题讨论】:
标签: mysql join duplicates outer-join
试试这个 -
SELECT * FROM TABLE1 WHERE ITEM NOT IN (SELECT ITEM FROM TABLE2)
UNION
SELECT * FROM TABLE2 WHERE ITEM NOT IN (SELECT ITEM FROM TABLE1)
【讨论】:
您可以使用NOT EXISTS,例如:
SELECT item
FROM table1 t1
WHERE NOT EXISTS (
SELECT item FROM table2 WHERE item = t1.item
);
【讨论】:
我们可以使用不同的联合 ALL 来加入它们。然后数数并拥有。
需要独特的,因为我们关心整个集合的独特性。
SELECT item FROM (
SELECT distinct item
FROM tbl1
UNION ALL
SELECT distinct item
FROM tbl2) B
GROUP BY item
HAVING count(*) =1
【讨论】:
SELECT * FROM TABLE1 WHERE ITEM NOT IN (SELECT ITEM FROM TABLE2)
union
SELECT * FROM TABLE2 WHERE ITEM NOT IN (SELECT ITEM FROM TABLE1)
或者另一种方法是使用内部联接来获取所有重复数据,然后提取所有不在重复数据集中的数据。
SELECT * into #temptable FROM TABLE1 INNER JOIN TABLE2 on table2.x = table1.x
union
SELECT * into #temptable FROM TABLE2 INNER JOIN TABLE1 on table2.x = table1.x
SELECT * FROM Table1 WHERE NOT IN (SELECT * FROM #temptable)
UNION
SELECT * FROM Table2 WHERE NOT IN (SELECT * FROM #temptable)
【讨论】:
很像 xQbert 的,但假设 item 是 UNIQUE/PRIMARY...
SELECT a.*
FROM
( SELECT item FROM table1
UNION ALL
SELECT item FROM table2
) a
GROUP
BY item
HAVING COUNT(*) = 1;
【讨论】: