MySQL加入以查找不匹配或可能是完全外部联接但排除

时间:2017-08-15 16:29:19

标签: mysql join duplicates outer-join

我在MySQL数据库中有两个相同的死简单表,它们具有不同的数据。我需要一个查询,它将返回所有不重复的结果。

以下是一个例子:

表1。(列“项目”)

a
b
c
d

表2。(列“项目”)

a
b
e
f
x

通缉结果

c
d
e
f
x

5 个答案:

答案 0 :(得分:4)

试试这个 -

SELECT * FROM TABLE1 WHERE ITEM NOT IN (SELECT ITEM FROM TABLE2)
UNION
SELECT * FROM TABLE2 WHERE ITEM NOT IN (SELECT ITEM FROM TABLE1)

答案 1 :(得分:0)

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)

答案 2 :(得分:0)

您可以使用NOT EXISTS,例如:

SELECT item
FROM table1 t1 
WHERE NOT EXISTS (
    SELECT item FROM table2 WHERE item = t1.item
);

答案 3 :(得分:0)

我们可以使用不同的联合ALL加入他们。数数和拥有。

因为我们关心整套的独特性,所以需要区别。

SELECT item FROM (
    SELECT distinct item
    FROM tbl1
    UNION ALL
    SELECT distinct item
    FROM tbl2) B
GROUP BY item
HAVING count(*) =1 

答案 4 :(得分:0)

很像xQbert,但假设item是UNIQUE / PRIMARY ...

SELECT a.*
  FROM
     ( SELECT item FROM table1
        UNION ALL
       SELECT item FROM table2
     ) a
 GROUP 
    BY item
HAVING COUNT(*) = 1;