PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL json_array_elements in der FROM-Klausel - warum ist dies kein kartesischer Join?

Tatsächlich ist das altmodisch Syntax für CROSS JOIN. Formales Äquivalent:

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

Die Abfrage erzeugt kein kartesisches Produkt, sondern wirkt eher wie ein Inner Join. Dies liegt daran, dass es ein verstecktes hat Verweis zwischen zwei Teilen von join, in diesem Fall Alias ​​t . Diese Art von Join wird als LATERAL JOIN bezeichnet . Für die Dokumentation :

Wenn einer der Teile eines Joins eine Funktion ist, wird er standardmäßig als lateral behandelt.