如何修改此查询以改进它? 我认为加入它会更好。
UPDATE t1 HIJA
SET IND_ESTADO = 'P'
WHERE IND_ESTADO = 'D'
AND NOT EXISTS
(SELECT COD_OPERACION
FROM t1 PADRE
WHERE PADRE.COD_SISTEMA_ORIGEN = HIJA.COD_SISTEMA_ORIGEN
AND PADRE.COD_OPERACION = HIJA.COD_OPERACION_DEPENDIENTE)
最好的问候。
答案 0 :(得分:0)
只要列表值声明为
NOT EXISTS
,Oracle的优化程序就能看到NOT IN
,LEFT JOIN / IS NULL
和NOT NULL
在语义上是等效的。< / p>它对所有三种方法使用相同的执行计划,并且它们同时产生相同的结果。
在Oracle中,可以安全地使用上述三种方法中的任何方法从另一个表中缺少的表中选择值。
但是,如果值不能保证
NOT NULL
,则应使用LEFT JOIN / IS NULL
或NOT EXISTS
而不是NOT IN
,因为后者会产生不同的结果,具体取决于是否在子查询结果集中有NULL
个值。
所以你拥有的已经很好了。 JOIN
一样好,但更好。
答案 1 :(得分:0)
如果性能有问题,有几条准则可以将不存在的地方重写为更有效的形式:
有关详细信息,请参阅Burleson。