我想根据条件触发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', '')
我有什么方法可以做到吗?
感谢。
ssedano
答案 0 :(得分: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)