sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL json_array_elements i FROM-klausulen - varför är detta inte kartesisk join?

Detta är faktiskt gammaldags syntax för CROSS JOIN. Formell motsvarighet:

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

Frågan producerar inte kartesisk produkt utan fungerar snarare som en inre sammanfogning. Detta beror på att den har en dold referens mellan två delar av join, i detta fall alias t . Den här typen av koppling kallas LATERAL JOIN . För dokumentationen :

Om en av delarna av en sammanfogning är en funktion behandlas den som lateral som standard.




  1. 3 sätt att få sammanställningen av en kolumn i MariaDB

  2. Uppdatera flera tabeller i en enda SQL-sats

  3. Hur mappar man Postgres _INT8 till Java-enhet med Hibernate?

  4. MigrationSchemaMissing(Kan inte skapa tabellen django_migrations (%s) % exc)