首页 > 解决方案 > 通过 sql-server 中的公共列将 select 语句组合在一起

问题描述

我需要根据一个公共列将两个表组合在一起。通常我只会在特定列上使用内部连接(我们称之为 parentID),但我需要将结果放在单独的行中。

表 A:

ID, ...

表 B:

ID, ParentID, SomeColB, ...

表 C:

ID, ParentID, SomeColC, ...

ParentID 指向表 A 的 ID。结果应如下所示:

ParentID  ID_A  ID_B  SomeColB  SomeColC
1         10    20    'VAL_B1'  NULL
1         10    20    NULL      'VAL_C1'
2         11    21    'VAL_B2'  NULL
2         11    21    NULL      'VAL_C2'
...

所以我想在从表 B 和 C 中选择值之间交替,并将剩余的列保留为空。我该怎么做?

我尝试将它们连接在一起,但这导致结果被放入一行。

编辑:表 B 和 C 都与表 A 具有 1-n 关系(表 a 中的一个条目可以从表 B 和 C 中的多个条目中引用)。表 B 和 C 不相互引用,完全相互独立。

标签: sqlsql-serverdatabasejoinunion

解决方案


像这样的东西对你有用吗?我使用 UNION 来获取每个 ParentID 的两组数据:

   SELECT
        *
    FROM (
        SELECT
            ParentID,
            ID_A,
            ID_B,
            SomeCol B,
            NULL AS SomeColC
        FROM
            TableA
        UNION
        SELECT
            ParentID,
            ID_A,
            ID_B,
            NULL AS SomeColB,
            SomeColC
        FROM
            TableB
        )
    ORDER BY
        ParentID,
        SomeColB,
        SomeColC

推荐阅读