2017-03-08 53 views
0

我有如下一个MySQL查询:有条件的工会执行第二查询,如果第一次犯规返回行

select m.field1, l.field2... l.fieldn 
from mytable m, logtable l 
where <some conditions to join m and l> 

union 

select m.field1, h.field2... h.fieldn 
from mytable m, loghistorytable h 
where <some conditions to join m and h> 

现在既然历史表是相当巨大的,命中的表现,我想执行从历史上第二只选择如果当前日志表没有返回数据。我可以修改查询吗?

+0

提示今天:切换到现代的,明确的'JOIN'语法!易于编写(没有错误),更易于阅读和维护,并且在需要时更容易转换为外部联接。 – jarlh

+0

为什么不简单地执行查询1.如果没有结果,执行查询2. – jarlh

回答

0

尝试重复第一个查询在第二个查询的条件如下:

select m.field1, l.field2... l.fieldn 
from mytable m, logtable l 
where <some conditions to join m and l> 

union 

select m.field1, h.field2... h.fieldn 
from mytable m, loghistorytable h 
where <some conditions to join m and h> 
and not exists (select m.field1, l.field2... l.fieldn 
       from mytable m, logtable l 
       where <some conditions to join m and l>) 
+0

不会解决性能问题的权利? – Anu

+0

@Anu Query不能解决第一个查询的性能问题。 – Parado

相关问题