【问题标题】:Oracle replace not in by left joinOracle用左连接替换不在
【发布时间】: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 替换所有这些 un​​ion 可以获得一些性能优势
  • @KapitulaAlexey 我看到很多与 SQL 相关的问题都是大写的。我只是好奇为什么会这样。
  • ID_DESCRIPTION NOT IN ID_NOMBRE 是描述并命名您要比较的东西?或者子查询应该只包含ID_DESCRIPTION 的选择。同样正如 Boneist 所说,使用 union all 而不是 union,您应该更快地获得结果。

标签: sql left-join notin


【解决方案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
....
)

并获得了巨大的性能提升,感谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2011-10-30
    • 2011-11-22
    • 2020-09-28
    • 1970-01-01
    • 2018-07-31
    相关资源
    最近更新 更多