1

我有 2 个正在返回的选择:

SELECT_A (COLUMN_A,COLUMN_B, SELECT_A_JOIN_COLUMN)

SELECT_B (COLUMN_A,COLUMN_B, SELECT_B_JOIN_COLUMN)

期望的结果:

Result  (COLUMN_A,COLUMN_B,SELECT_A_JOIN_COLUMN,SELECT_B_JOIN_COLUMN)

例子:

SELECT_A结果:

A B zxc
A B rty

SELECT_B结果:

A B yui
A B hjk

期望的结果:

A B zxc null
A B rty null
A B null yui
A B null hjk

如何做到这一点?

这几乎就像联合,但我可以通过加入来做到这一点吗?

编辑

好的。所以让我陈述我的目标。我想让查询返回一个分层树。这是因为 LINQ2Entities 正在为查询生成额外缓慢且效率低下的 sql,其中包含许多导航属性。

所以我首先要实现的是得到树……不知何故。

例子:

我想达到以下结果:

ObjectId | ChildType1Id | ChildType1Field | ChildType2Id | ChildType2Field

    1          34          asd          null        null
    1          12          xcv          null        null
    1          5           klk          null        null
    1          null        null         6           vbn
    1          null        null         7           jkh

到目前为止,我得到了 2 个带有左连接的简单选择,这些选择返回了我:

ObjectId  | ChildType1Id | ChildType1Field
    1          34             asd
    1          12             zcv
    1          5              klk

ObjectId  | ChildType2Id | ChildType2Field
   1             6           vbn 
   1             7           jkh

如果我将有更多的儿童类型怎么办?对于每个 childType,我似乎确实需要使用联合。如果我将有 50 列,我需要在 UNION 中说明所有这些列(因为它需要相同数量的列)。我可以避免使用诸如加入之类的所有这些联合来添加我需要的列(下一个子类型列)吗?

3 种不同 childrenTypes 的期望结果:

ObjectId|ChildType1Id|ChildType1Field|ChildType2Id|ChildType2Field|ChildType3Id|ChildType3Field

    1          34          asd          null        null       null         null 
    1          12          xcv          null        null       null         null
    1          5           klk          null        null       null         null
    1          null        null         6           vbn        null         null
    1          null        null         7           jkh        null         null
    1          null        null         null        null        5           iop
    1          null        null         null        null        9           klp

任何帮助表示赞赏。

4

4 回答 4

5

这样做比 a ( SQL Fiddle )JOIN更复杂UNION

SELECT COALESCE(A.COLUMN_A, B.COLUMN_A) AS COLUMN_A,
       COALESCE(A.COLUMN_B, B.COLUMN_B) AS COLUMN_B,
       SELECT_A_JOIN_COLUMN,
       SELECT_B_JOIN_COLUMN
FROM   SELECT_A A
       FULL OUTER JOIN SELECT_B B
         ON SELECT_A_JOIN_COLUMN = SELECT_B_JOIN_COLUMN 
于 2012-09-21T19:03:05.143 回答
1

它是一个联盟。

SELECT COLUMN_A, COLUMN_B, SELECT_A_JOIN_COLUMN, NULL
    FROM SELECT_A
UNION ALL
SELECT COLUMN_A, COLUMN_B, NULL, SELECT_B_JOIN_COLUMN
    FROM SELECT_B;
于 2012-09-21T18:57:48.227 回答
0
select COLUMN_A, COLUMN_B, SELECT_A_JOIN_COLUMN, null
from SELECT_A
union all
select COLUMN_A, COLUMN_B, null, SELECT_B_JOIN_COLUMN
from SELECT_B
于 2012-09-21T18:57:13.873 回答
0

我不明白你想要什么是加入。这个工会这样做:

select *
from ((select COLUMN_A,COLUMN_B, SELECT_A_JOIN_COLUMN, NULL as SELECT_B_JOIN_COLUMN
       from SELECT_A
      ) union all
      (select COLUMN_A,COLUMN_B, NULL as SELECT_A_JOIN_COLUMN, SELECT_B_JOIN_COLUMN
       from SELECT_B
      )
     ) t
order by 1, 2, 3, 4
于 2012-09-21T18:58:49.897 回答