如何在左连接表中应用CASE

时间:2014-03-19 17:26:45

标签: mysql sql left-join case

我有一个MySQL查询,需要连接两次。有四个表A,B,C,D和两​​种可能性,如果A.label为null,则

select ... from A
left join B on B.name=A.name
left join D on B.bid=D.id;

否则,如果A.label不为null,我有

select ... from A
left join C on C.name=A.name
left join D on C.cid=D.id;

如果我想通过CASE条件将这两个查询合并为一个,我该怎么办?

3 个答案:

答案 0 :(得分:1)

不完全确定我是否遵循了您之后的内容,但您可以添加到JOIN条件,然后使用COALESCE()

select COALESCE(b.name,c.name) Name
    ....
from A
left join B 
   on B.name=A.name
   AND A.label IS NULL
left join D 
   on B.bid=D.id
left join C 
   on C.name=A.name
   AND A.label IS NOT NULL
left join E
   on C.cid=E.id

答案 1 :(得分:0)

假设您的查询没有产生重复的行,您可以在一个查询中执行这两个连接。然后通过在case子句中合并select语句来确定要使用的值:

select A.*,
       (case when a.label is null then b.value else c.value end) as value,
       . . . 
from A left join
     B
     on B.name = A.name left join
     C
     on C.name = A.name left join
     D
     on C.cid = D.id;

答案 2 :(得分:0)

使用UNION:

select ... from A
left join B on B.name=A.name
left join D on B.bid=D.id;
where A.label IS NULL
UNION ALL
select ... from A
left join C on C.name=A.name
left join D on C.cid=D.id
WHERE A.label IS NOT NULL