如何根据条件更改表连接

时间:2013-07-13 01:04:34

标签: sql sql-server join outer-join

如何根据某些条件更改表加入?

我有一个Master表和2个子表,Child1Child2。有一个ChildType字段。

要求是根据子类型将子表连接到主表。在结果中,MasterIDChildName是必需的。

以下是使用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,都来自几个表,我想避免重复。

2 个答案:

答案 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 演示