1

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

我有一个Master表和 2 个子表Child1,,,Child2。有一个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 并使用外连接的情况下编写此查询。实际查询中的子和主的原因来自多个表,我想避免重复。

4

2 回答 2

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 字段。

于 2013-07-13T01:13:00.390 回答
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演示

于 2013-07-13T01:28:24.070 回答