如何在 SQL 中合并两个具有不同列和不同关系的表
如何在 SQL 中组合以下示例中的列和行,而不在其他表中不存在的列上提取带有空值的额外行?这应该类似于 SAS 中的 OUTER UNION CORR。
两个表中的EMP_ID和Dept_ID没有确切的ID列表,例如表A中的ID可能不在表B中,反之亦然。
表 A
EMP_ID Dept_ID VISIT_CA_DATE
001 01 5/2/2011
002 02 null
004 03 6/8/2011
表 B
EMP_ID Dept_ID LAST_OUT REASON
001 01 6/1/2011 sick
003 02 7/2/2011 vacation
预期结果如下 - 所有 EMP_ID 均具有相应的 Visit_date 信息和缺席信息。
EMP_ID Dept_ID VISIT_CA_DATE LAST_OUT REASON
001 01 5/2/2011 6/1/2011 sick
002 02 null null null
003 02 null 7/2/2011 vacation
004 03 6/8/2011 null null
对我有用的唯一方法如下。有更好的方法来实现这一目标吗?谢谢!
A LEFT OUTER JOIN B on A.EMP_ID=B.EMP_ID
UNION
B LEFT OUTER JOIN A ON B.EMP_ID=A.EMP_ID
How do I combine columns and rows in the following example in SQL without pulling extra rows with nulls on columns that not existing in the other table? This should be similar to the OUTER UNION CORR in SAS.
EMP_ID and Dept_ID in the two tables don't have the exact ID list, e.g. ID in table A might not be in table B so as the other way around.
Table A
EMP_ID Dept_ID VISIT_CA_DATE
001 01 5/2/2011
002 02 null
004 03 6/8/2011
Table B
EMP_ID Dept_ID LAST_OUT REASON
001 01 6/1/2011 sick
003 02 7/2/2011 vacation
Expecting result like this - all EMP_ID with corresponding visit_date info and absent info.
EMP_ID Dept_ID VISIT_CA_DATE LAST_OUT REASON
001 01 5/2/2011 6/1/2011 sick
002 02 null null null
003 02 null 7/2/2011 vacation
004 03 6/8/2011 null null
The only way worked for me is below. Is there better way to achieve this? Thanks!
A LEFT OUTER JOIN B on A.EMP_ID=B.EMP_ID
UNION
B LEFT OUTER JOIN A ON B.EMP_ID=A.EMP_ID
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以执行
FULL OUTER JOIN
。它基本上是LEFT JOIN
和RIGHT JOIN
的组合。像这样的东西:You can do a
FULL OUTER JOIN
. It's basically aLEFT JOIN
and aRIGHT JOIN
combined. Something like this:虽然它看起来可能和你的差不多。
Altough It probably it looks like about the same as you did.