繁体   English   中英

如何在SQL中组合两个具有不同列和不同关系的表

[英]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 JOINRIGHT 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM