Ta,Tb两张数据库表关联列为 Ta.aid = Tb.bid,现在要取 Ta 中的数据,其中Ta.aid的值在b中也存在:
SQLl实现如下:
select * from Ta where exists(select 1 from Tb where Ta.aid = Tb.bid)
福利一枚:
现在要取 Ta 中的数据,其中Ta.aid在Tb中不存在:
select * from
Ta where not exists(select 1 from Tb where Ta.aid = Tb.bid)
有两个简单例子,以说明 “exists”和“in”的效率问题
1) select * from Ta where exists(select 1 from Tb where
Ta.aid = Tb.bid) ;
Ta数据量小而Tb数据量非常大时,Ta<<Tb 时,1) 的查询效率高。
2) select * from Ta where Ta.aid in (select Tb.bid from Tb) ;
Ta数据量非常大而Tb数据量小时,Ta>>Tb 时,2) 的查询效率高。