如何根据某些条件更改表加入?
我有一个Master
表和2个子表,Child1
,Child2
。有一个ChildType
字段。
要求是根据子类型将子表连接到主表。在结果中,MasterID
和ChildName
是必需的。
以下是使用UNION
select m.MasterID, c1.ChildName from Master
inner join Child1 c1 on c1.MasterId = m.MasterId
UNION
select m.MasterID, c2.ChildName from Master
inner join Child1 c2 on c2.MasterId = m.MasterId
我想在不使用UNION和使用外部联接的情况下编写此查询。实际查询中的原因,无论是child还是master,都来自几个表,我想避免重复。
答案 0 :(得分:1)
如果它们是相互排斥的,可能是这样的:
SELECT m.MasterID
,CASE WHEN c1.ChildName IS NULL THEN c2.ChildName ELSE c1.ChildName END AS ChildName
FROM Master m
LEFT JOIN Child1 c1 on (c1.MasterId = m.MasterId)
LEFT JOIN Child1 c2 on (c2.MasterId = m.MasterId)
否则,请使用CASE中的ChildType字段。
答案 1 :(得分:0)
尝试
SELECT m.MasterId, COALESCE(c1.ChildName, c2.ChildName) ChildName
FROM Master m LEFT JOIN Child1 c1
ON m.MasterId = c1.MasterId
AND m.ChildType = 1 LEFT JOIN Child2 c2
ON m.MasterId = c2.MasterId
AND m.ChildType = 2
这是 SQLFiddle 演示