PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL json_array_elements dans la clause FROM - pourquoi n'est-ce pas une jointure cartésienne ?

En fait c'est à l'ancienne syntaxe pour CROSS JOIN. Équivalent formel :

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

La requête ne produit pas de produit cartésien mais agit plutôt comme une jointure interne. C'est parce qu'il a un caché référence entre deux parties de jointure, dans ce cas alias t . Ce type de jointure est appelé LATERAL JOIN . Pour la documentation :

Si l'une des parties d'une jointure est une fonction, elle est traitée comme latérale par défaut.