繁体   English   中英

优化所有联合查询

[英]Optimized the Query in Union all

这是我的样品问题。

表名称ledg,bill,vocu

 Ledg

    id
    name

bill
   id
   amt

vouc

   id
   amt

在这里,我想选择amt大于Bill和vouc的名称。 但是Bill和vouc没有相同的ID。 而且我想显示哪个amt仅大于零。

所以我尝试这样

select *  
from ledg g inner join vouc v on v.id=g.id 

union all

select *  
from ledg g inner join bill b on b.id=g.id

它的工作正常。 我可以在单个查询或任何有效查询中得到相同的结果吗?

样品

insert into ledg(id,name) values(1,'aa'),
(2,'bb'),
(3,'cc');


insert into bill(id,amt) values(1,10),(2,-10);

insert into vouc(id,amt) values(3,30);

OUTPUT

NAME  Amt

aa    10
cc    30

如果要在其他两个表中的ledg行的值大于0 ,则可以执行以下操作:

select g.*
from ledg g
where exists (select 1 from vouc v where v.id = l.id and v.amt > 0) and
      exists (select 1 from bill b where b.id = l.id and b.amt > 0);

这可以充分利用voucbillid列上的索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM