我需要能够显示实际上不存在于第二个表中的行的结果。我尝试过left join,但它似乎不能满足我的需要。我有两个表,例如:
Table1
NAME | KEY
John 12345
Frank 23456
Table2
KEY | LIST | STATUS
12345 10001 1
12345 10003 0
23456 10001 1
23456 10002 1我需要能够像这样显示结果:
NAME | KEY | LIST | STATUS
John 12345 10001 1
John 12345 10002 (null)
John 12345 10003 0
Frank 23456 10001 1
Frank 23456 10002 1
Frank 23456 10003 (null)但是我不知道该怎么做,因为返回空值的记录实际上并不存在于第二个表中。如果我一次运行一个,我可以通过执行UNION ALL得到我需要的结果,但这并不高效(我还必须重新排序我的结果,这也使得它变得更加困难)。
SELECT b.list, a.name, a.key, b.status
FROM table1 a JOIN table2 b ON a.key = b.key
WHERE a.name = 'John'
UNION ALL
SELECT distinct(b.list), NULL AS "a.name", NULL AS "a.key", NULL AS "b.status"
FROM table2 b这也不是一个理想的解决方案,因为我拉取了列表的其余部分,但其他字段最终为空,因此当我将结果移动到excel中时,我必须手动粘贴它们。
有什么想法吗?我真的认为我应该能够使用左连接来做这件事,但是我所做的似乎都不起作用。
发布于 2016-05-24 07:34:54
尝试完全外部联接
示例:
SELECT A.NAME, A.KEY, A.LIST, B.STATUS
FROM Table1 A
FULL OUTER JOIN Table2 B
ON A.KEY = B.KEY AND A.LIST = B.LIST如果不希望第二个表中的行在第一个表中没有引用,则添加条件:
WHERE A.KEY IS NOT NULLhttps://stackoverflow.com/questions/37402092
复制相似问题