SELECT q.id, d.key, d.value
FROM q
JOIN json_each_text(q.data) d ON true
ORDER BY 1, 2;
Funktionen json_each_text()
er en sæt returnerende funktion, så du bør bruge den som en rækkekilde. Outputtet af funktionen er her sammenføjet lateralt
til tabellen q
, hvilket betyder, at for hver række i tabellen, hver (key, value)
par fra data
kolonne er kun forbundet med denne række, så forholdet mellem den oprindelige række og rækkerne dannet fra json
objekt vedligeholdes.
Tabellen q
kan også være en meget kompliceret underforespørgsel (eller en VALUES
klausul, som i dit spørgsmål). I funktionen bruges den relevante kolonne fra resultatet af evalueringen af den underforespørgsel, så du bruger kun en reference til underforespørgslens alias og (alias for) kolonnen i underforespørgslen.