我想比较两个表并获得一组结果,其中查找值不匹配以及另一个表中缺少键值。第一部分适用于以下查询:
SELECT * FROM (
SELECT mID, mLookup
FROM m) t1
FULL OUTER JOIN (
SELECT aID, aLookup
FROM a) t2
ON t1.mID = t2.aID
WHERE
t1.mID = t2.aID AND
t1.mLookup <> t2.aLookup
但是,它不会从 t1 和 t2 返回行,因为在其他表中没有相应的 ID(因为ON t1.mID = t2.aID
).
如何在同一个查询中实现这两个目标?
去掉ID部分WHERE
条款。这FULL OUTER JOIN
ON t1.mID = t2.aID
足以将表链接在一起。 FULL OUTER JOIN 将返回连接中的两个表,即使其中一个表不匹配。
但是,那WHERE t1.m_ID = t2.aID
子句将结果限制为两个表中都存在的 ID。这有效地导致了FULL OUTER JOIN
表现得像INNER JOIN
.
换句话说:
SELECT * FROM (
SELECT mID, mLookup
FROM m) t1
FULL OUTER JOIN (
SELECT aID, aLookup
FROM a) t2
ON t1.mID = t2.aID
WHERE
--t1.mID = t2.aID AND -- remove this line
t1.mLookup <> t2.aLookup
- 编辑 -
重新阅读你的问题,你只想要不匹配的地方。在这种情况下,您需要搜索任何一方的 ID 为 NULL 的位置:
SELECT * FROM (
SELECT mID, mLookup
FROM m) t1
FULL OUTER JOIN (
SELECT aID, aLookup
FROM a) t2
ON t1.mID = t2.aID
WHERE
t1.mID IS NULL OR
t2.mID IS NULL OR
t1.mLookup <> t2.aLookup
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)