[英]How to make an sql join to achieve desired result?
我有两个选择返回:
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中声明所有这些列(因为它需要相同数量的列)。 我是否可以避免仅通过添加所需列(下一个childtype列)之类的方式使所有这些并集成为联接?
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
任何帮助表示赞赏。
作为一个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
这是一个联盟。
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;
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
我看不到您想要的加入方式。 该联合会这样做:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.