我有一个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条件将这两个查询合并为一个,我该怎么办?
答案 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