MySQL 加入以查找不匹配项或可能是带排除的完整外部加入

MySQL join to find non-matches or possibly a full outer join with exclusion

我在 MySQL 数据库中有 2 个相同的非常简单的表,其中包含不同的数据。我需要一个查询来 return 所有不重复的结果。

这是一个例子:

Table 1.(第 "item" 列)

a
b
c
d

Table 2.(第 "item" 列)

a
b
e
f
x

想要的结果

c
d
e
f
x
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)

您可以使用NOT EXISTS,例如:

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

我们可以使用不同的 union ALL 加入它们。然后数一数。

需要 distinct,因为我们关心集合中的唯一性。

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)

很像 xQbert 的,但假设项目是 UNIQUE/PRIMARY...

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