0

我想union根据条件触发:

set @a := 0;

select @a := 1, b.name from B b
UNION
select 0, c.name from C c

输出如下:

set @a := 0;

select @a := 1, b.name from B b
if(@a > 0, UNION select 0, c.name from C c, '');

因此,如果第一个选择已经返回行,我可以保存第二个选择。问题是这些查询很重并且有很多连接,所以我只想在必要时执行它们。

由于这项工作:

select b.name from B b where if(true, b.name = 'example', '')

有什么办法可以做到吗?

谢谢。

塞达诺

4

1 回答 1

2

您想从 B 中选择所有行。如果没有,那么您需要 C 中的行。您可能可以摆弄条件逻辑来做到这一点。您也可以使用 SQL 查询来执行此操作:

select 1 as which, name
from B union all
select 0 as which, name
from C
where not exists (select 1 from B limit 1)
于 2012-10-08T13:50:39.237 回答