从两个不同的表中选择所有记录

时间:2014-05-27 14:36:46

标签: sql-server select join

我有2个表,“EMPL”和“REG”:

enter image description here

我在NUM_EMPL中有5个EMPL条记录,在REG中我只有2条记录,但我还有5条记录。

我想做的是 显示这10条记录:

enter image description here

我怎么能这样做? 我尝试过:

SELECT        ACM_ACT.NUM_EMPL, ACM_EMPL.NUM_EMPL AS AEMPL, ACM_EMPL.NOM_EMPL
FROM            ACM_ACT CROSS JOIN ACM_EMPL
ORDER BY AEMPL, ACM_EMPL.NOM_EMPL

更多queries但他们不能工作!

3 个答案:

答案 0 :(得分:3)

使用FULL JOIN

SELECT  ISNULL(E.NUM_EMPL,R.NUM_EMP) AS NUM_EMP,
        E.NAME
FROM EMPL E
FULL JOIN REG R
    ON E.NUM_EMPL = R.NUM_EMP

答案 1 :(得分:1)

首先在cte中捕获所有员工编号:

;WITH cte AS (SELECT NUM_EMPL FROM EMPL UNION SELECT NUM_EMPL FROM REG)
SELECT cte.NUM_EMPL, EMPL.NAME
FROM cte 
LEFT OUTER JOIN EMPL ON cte.NUM_EMPL = EMPL.NUM_EMPL

答案 2 :(得分:1)

Dave.Gugg 答案的小修正

     ;WITH cte 
      AS 
       (
          SELECT NUM_EMPL FROM EMPL 
          UNION 
          SELECT NUM_EMPL FROM REG
       ) 
      SELECT cte.NUM_EMPL,
      Case when EMPL.NAME is Null then '-----' else EMPL.NAME end as Name 
      FROM cte       
      LEFT OUTER JOIN EMPL ON cte.NUM_EMPL = EMPL.NUM_EMPL