如何使sql join实现所需的结果?

mbu*_*nik 1 sql t-sql join

我有2个选择正在返回:

SELECT_A (COLUMN_A,COLUMN_B, SELECT_A_JOIN_COLUMN)

SELECT_B (COLUMN_A,COLUMN_B, SELECT_B_JOIN_COLUMN)
Run Code Online (Sandbox Code Playgroud)

期望的结果:

Result  (COLUMN_A,COLUMN_B,SELECT_A_JOIN_COLUMN,SELECT_B_JOIN_COLUMN)
Run Code Online (Sandbox Code Playgroud)

例:

SELECT_A 结果:

A B zxc
A B rty
Run Code Online (Sandbox Code Playgroud)

SELECT_B 结果:

A B yui
A B hjk
Run Code Online (Sandbox Code Playgroud)

期望的结果:

A B zxc null
A B rty null
A B null yui
A B null hjk
Run Code Online (Sandbox Code Playgroud)

怎么做到这一点?

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

编辑:

好.所以让我说明我的目标.我想让查询返回一个分层树.这是因为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
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有两个简单的选择,左连接返回我:

ObjectId  | ChildType1Id | ChildType1Field
    1          34             asd
    1          12             zcv
    1          5              klk
Run Code Online (Sandbox Code Playgroud)

ObjectId  | ChildType2Id | ChildType2Field
   1             6           vbn 
   1             7           jkh
Run Code Online (Sandbox Code Playgroud)

如果我有更多的孩子类型怎么办?对于每个childType,我似乎需要使用union.如果我有50列,我需要在UNION中声明所有这些列(因为它需要相同数量的列).我可以避免使用像join这样的所有联盟来添加我需要的列(下一个childrentype列)吗?

3种不同儿童的所需结果类型:

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
Run Code Online (Sandbox Code Playgroud)

任何帮助赞赏.

Mar*_*ith 5

要做到这一点JOIN比一个UNION(SQL小提琴)更复杂

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 
Run Code Online (Sandbox Code Playgroud)