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;
我在 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;