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

¿Los paréntesis anidados en la cláusula FROM son válidos para la sintaxis de Oracle SQL?

Es una sintaxis legal usar paréntesis en una cláusula de unión en un FROM , y los paréntesis do tener un efecto.

Considere esta consulta:

WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
     table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
     table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
SELECT a.id, b.id, c.id
FROM   table_a a left join ( table_b b inner join table_c c ON c.id = b.id ) ON b.id = a.id 
ORDER BY 1,2,3;

Los paréntesis le permiten hacer una unión interna de tablas b y c y luego unir eso a a .

Sin el paréntesis, tratar de expresar eso como una combinación izquierda sería imposible. O no obtendría las filas 11-30 de la tabla a o bien las filas 11-20 de la tabla c sería null s (dependiendo de cómo haya intentado hacerlo).

Tenga en cuenta que la consulta anterior es equivalente a:

WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
     table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
     table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
SELECT a.id, b.id, c.id
FROM   table_b b inner join table_c c on c.id = b.id right join table_a a on a.id = b.id 
ORDER BY 1,2,3;

, que no requiere paréntesis. Entonces, si realmente desea evitar el uso de paréntesis en FROM cláusula, por lo general puede hacerlo. Personalmente, prefiero LEFT JOIN método con paréntesis en lugar de RIGHT JOIN .