[英]How to combine two tables with vary columns and vary relations in 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
你可以做一个FULL OUTER JOIN
。 它基本上是LEFT JOIN
和RIGHT JOIN
组合。 像这样的东西:
SELECT COALESCE(A.Emp_Id,B.Emp_Id) Emp_Id,
COALESCE(A.Dept_Id,B.Dept_Id) Dept_Id,
A.VISIT_CA_DATE,
B.LAST_OUT,
B.REASON
FROM TableA A
FULL OUTER JOIN TableB B
ON A.Emp_Id = B.Emp_Id AND A.Dept_Id= B.Dept_Id
SELECT t.EMP_ID, t.Dept_Id, A.VISIT_CA_DATE, B.LAST_OUT, B.REASON
FROM (
SELECT EMP_ID, Dept_Id FROM A
UNION
SELECT EMP_ID, Dept_Id FROM B
) t
LEFT JOIN A ON t.EMP_ID = A.EMP_ID
LEFT JOIN B ON t.EMP_ID = B.EMP_ID
尽管它看起来和你一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.