如何在SQL中组合以下示例中的列和行,而不提取其他表中不存在的列上具有空值的额外行?这应该类似于SAS中的外部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像这样的预期结果-带有相应的visit_date信息和缺少信息的所有EMP_ID。
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发布于 2011-08-06 04:43:25
你可以做一个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发布于 2011-08-06 04:49:48
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尽管它看起来和你做的差不多。
https://stackoverflow.com/questions/6962264
复制相似问题