据我所见,相关的子查询可以使用多列子查询或联接重写。而且它们通常比相关子查询的性能更好。
那么,在哪些可能的场景中,关联子查询可以是更好的选项还是唯一的选项?(我使用Oracle数据库)
发布于 2020-11-27 14:50:04
Oracle有一个很好的优化器,但相关子查询有时是表示查询的最有效方法。例如:
select t.*,
(select count(*) from z where z.t_id = t.id)
from t;使用z(t_id)上的索引可以非常有效,因为它避免了外部聚合。
在其他情况下,它们都是有效的,并直接转化为一个问题:获取z中不存在的所有ts。
select t.*
from t
where not exists (select 1 from z where z.id = t.id);最后,关联子查询只是横向连接的一个例子。横向连接可以相当强大。例如,要从上一行获取所有列,可以使用:
select t.*, t2.*
from t cross join lateral
(select t2.*
from t t2
where t2.date < t.date
order by t2.date desc
fetch first 1 row only
) t2;https://stackoverflow.com/questions/65039247
复制相似问题