sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL json_array_elements in FROM-clausule - waarom is dit geen cartesiaanse join?

In feite is dit ouderwets syntaxis voor CROSS JOIN. Formeel equivalent:

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

De query levert geen cartesiaans product op, maar werkt eerder als een inner join. Dit komt omdat het een verborgen . heeft verwijzing tussen twee delen van join, in dit geval alias t . Dit soort join staat bekend als LATERAL JOIN . Voor de documentatie :

Als een van de onderdelen van een join een functie is, wordt deze standaard als lateraal behandeld.




  1. Waar wordt een rijconstructor voor gebruikt?

  2. Een database herstellen vanuit C#

  3. De gekozen LC_CTYPE-instelling vereist codering LATIN1

  4. SQL CASE en lokale variabelen