表A 和B有1:N关系,需要根据B表某个条件,通过semi-join查询A表上某个列(属性)。因为semi-join已经包含一个去重过程,不需要在A表上加distinct。比内连接然后去重方式性能更好。
select distinct a11.id1 from a11,a12 where a11.id1=a12.id1;----- inner jion 耗时长
select id1 from a11 where exists(select 1 from a12 where a11.id1=a12.id1) 耗时很短
当B表只是用来只是用来关联而无需查询时候,用semi-join 更方便,省略了distinct动作