【问题标题】:Selecting all records from two different tables从两个不同的表中选择所有记录
【发布时间】:2014-05-27 14:36:45
【问题描述】:

我有两张桌子,“EMPL”和“REG”:

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

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

我该怎么做? 我试过了:

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 但它们不起作用!

【问题讨论】:

  • 你听说过外连接吗???

标签: sql-server select join


【解决方案1】:

使用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

【讨论】:

    【解决方案2】:

    首先捕获 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
    

    【讨论】:

    • 如果我想做同样的 SELECT 但我想为移动设备做。 我该怎么做?我尝试了同一行,但它不起作用Sql Server Compact ADO.NET Data Provider [Token line number = 1, Token line offset = 1, Token in error = WITH]@Dave.Gugg @Jean
    • @Jean 上面的查询将得到 EMPL_NAMENUll 仅当没有对应的值所以尝试使用像;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
    【解决方案3】:

    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
    

    【讨论】:

    • 哇。我不知道你能做到这一切。优秀的@Rajesh
    猜你喜欢
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多