我想比较两个表并获得一组结果,其中查找值不匹配以及其他表中缺少键值的位置.第一部分可以正常使用以下查询:
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
Run Code Online (Sandbox Code Playgroud)
但是,它不返回t1和t2中的行,其中在另一个表中没有相应的ID(因为ON t1.mID = t2.aID).
如何在同一个查询中实现这两个目标?
删除该WHERE子句的ID部分.这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
Run Code Online (Sandbox Code Playgroud)
- 编辑 -
重新阅读你的问题,你只想要不匹配.在这种情况下,您需要搜索任何一方的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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35668 次 |
| 最近记录: |