这里用样本解释我的问题。
表名ledg,bill,vocu
列
Ledg
id
name
bill
id
amt
vouc
id
amt
这里我想在bill和vouc中选择amt大于零的名称。但是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);
输出
NAME Amt
aa 10
cc 30
答案 0 :(得分:1)
如果您想要其他两个表中值大于ledg
的{{1}}行,您可以执行以下操作:
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);
和id
中vouc
列的索引。