Oracle用左连接替换不在
Posted
技术标签:
【中文标题】Oracle用左连接替换不在【英文标题】:Oracle replace not in by left join 【发布时间】:2016-11-11 15:33:41 【问题描述】:我正在尝试创建一个清理脚本来清除所有未使用的描述: 我的查询看起来像:
DELETE FROM DESCRIPCIONES WHERE ID_DESCRIPCION NOT IN
(SELECT ID_NOMBRE FROM CUESTIONARios
UNION
SELECT ID_DESCRIPCION FROM CUESTIONARIOS
UNION
SELECT ID_NOMBRE FROM PLANTILLAS
....
)
此外,我在此查询中有更多的 UNION。这就是为什么此查询需要太多时间的原因。有没有办法用更快的 LEFT JOIN 替换此查询并避免嵌套查询。 PD:甲骨文11g
谢谢
【问题讨论】:
SQL 问题和大喊大叫的标题是怎么回事? 没有得到你的问题... 用 union all 替换所有这些 union 可以获得一些性能优势 @KapitulaAlexey 我看到很多与 SQL 相关的问题都是大写的。我只是好奇为什么会这样。ID_DESCRIPTION NOT IN ID_NOMBRE
是描述并命名您要比较的东西?或者子查询应该只包含ID_DESCRIPTION
的选择。同样正如 Boneist 所说,使用 union all
而不是 union
,您应该更快地获得结果。
【参考方案1】:
最后我使用了下一个查询:
DELETE FROM DESCRIPCIONES WHERE ID_DESCRIPCION NOT IN
(SELECT ID_NOMBRE FROM CUESTIONARIOS
UNION ALL
SELECT ID_DESCRIPCION FROM CUESTIONARIOS
UNION ALL
SELECT ID_NOMBRE FROM PLANTILLAS
....
)
并获得了巨大的性能提升,感谢大家!
【讨论】:
以上是关于Oracle用左连接替换不在的主要内容,如果未能解决你的问题,请参考以下文章