sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL json_array_elements en la cláusula FROM:¿por qué no es una unión cartesiana?

De hecho, esto es anticuado sintaxis para CROSS JOIN. Equivalente formal:

SELECT
    t.json_column->>'x',
    nested->>'y'
FROM 
    my_table t
CROSS JOIN
    json_array_elements(t.json_column->'nested') nested;

La consulta no produce un producto cartesiano, sino que actúa como una unión interna. Esto se debe a que tiene un oculto referencia entre dos partes de join, en este caso alias t . Este tipo de unión se conoce como LATERAL JOIN . Para la documentación :

Si una de las partes de una unión es una función, se trata como lateral por defecto.