2012-10-08 29 views
0

工会,我想触发union根据条件:Mysql的防止基于条件

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

回答

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) 
+0

事情是,第一个查询有一些连接和遗留的东西,使它变慢。我想知道是否可以保存发出多个选择 – ssedano

+0

如果您不想执行查询,那么您需要条件逻辑,可能需要临时表。 –