多表查询
说明
有order表,表结构如下:
id | item_name |
---|---|
A1 | “欧诗漫” |
A2 | "戴森” |
有order_trc_pay表,表结构如下:
id | order_id | amt |
---|---|---|
1 | A1 | 123 |
2 | B1 | 234 |
现在需要求出“欧诗漫”对应的总金额。
我的做法:
select sum(m.amt) as a from ORDER_TRC_PAY m where m.order_id in (
select t.id
from "ORDER" t where t.item_name = '欧诗漫' )
大佬的做法:
select sum(m.bal_amt) as a from ORDER_TRC_PAY m where exists (select 1 from "ORDER" n where m.order_id = n.id and n.item_name = '欧诗漫')
一般来说,关键字 exists 的效率是要比关键字 in 的效率高,真的是这样吗?
查阅资料:
IN适合于外表大而内表小;
EXISTS适合于外表小而内表大