PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL json_array_elements nella clausola FROM:perché questo non è un join cartesiano?

In realtà questo è vecchio stile sintassi per CROSS JOIN. Equivalente formale:

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

La query non produce un prodotto cartesiano ma agisce piuttosto come un inner join. Questo perché ha un nascosto riferimento tra due parti di join, in questo caso alias t . Questo tipo di join è noto come LATERAL JOIN . Per la documentazione :

Se una delle parti di un'unione è una funzione, viene considerata laterale per impostazione predefinita.