sql >> Base de Datos >  >> RDS >> Oracle

Oráculo. Evitar la subconsulta fusionada y las condiciones de la consulta principal

ROWNUM es la forma más segura de evitar las transformaciones del optimizador y garantizar la seguridad de los tipos. Usando ROWNUM hace que Oracle piense que el orden de las filas es importante y evita cosas como la inserción de predicados y la fusión de vistas.

select *
from
(
   select id, value, rownum --Add ROWNUM for type safety.
   from eav
   where attr like 'sal%' 
)
where to_number(value) > 5000;

Hay otras formas de hacer esto, pero ninguna de ellas es confiable. No se moleste con vistas en línea simples, expresiones de tabla comunes, CASE , orden de predicados o sugerencias. Esos métodos comunes no son confiables y los he visto fallar a todos.

La mejor solución a largo plazo es modificar la tabla EAV para tener una columna diferente para cada tipo, como describo en esta respuesta . Solucione esto ahora o los futuros desarrolladores maldecirán su nombre cuando tengan que escribir consultas complejas para evitar errores tipográficos.