我有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
到目前为止,我有两个简单的选择,左联接让我回复:
ObjectId | ChildType1Id | ChildType1Field
1 34 asd
1 12 zcv
1 5 klk
和
ObjectId | ChildType2Id | ChildType2Field
1 6 vbn
1 7 jkh
如果我有更多的孩子类型怎么办? 对于每个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
任何帮助表示感谢。
答案 0 :(得分:5)
要做JOIN
比UNION
(SQL Fiddle)
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
答案 1 :(得分:1)
这是一个UNION。
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;
答案 2 :(得分: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
答案 3 :(得分: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