[英]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);
这可以充分利用vouc
和bill
的id
列上的索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.