PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL json_array_elements na cláusula FROM - por que isso não é uma junção cartesiana?


Na verdade, isso é antiquado sintaxe 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;

A consulta não produz um produto cartesiano, mas age como uma junção interna. Isso ocorre porque ele tem um oculto referência entre duas partes de junção, neste caso alias t . Esse tipo de junção é conhecido como LATERAL JOIN . Para a documentação :

Se uma das partes de uma junção for uma função, ela será tratada como lateral por padrão.