SELECT q.id, d.key, d.value
FROM q
JOIN json_each_text(q.data) d ON true
ORDER BY 1, 2;
De functie json_each_text()
is een set-retourfunctie, dus u moet deze als rijbron gebruiken. De uitvoer van de functie is hier zijwaarts samengevoegd
naar de tabel q
, wat betekent dat voor elke rij in de tabel, elke (key, value)
paar uit de data
kolom wordt alleen aan die rij toegevoegd, dus de relatie tussen de oorspronkelijke rij en de rijen gevormd uit de json
object blijft behouden.
De tabel q
kan ook een zeer gecompliceerde subquery zijn (of een VALUES
clausule, zoals in uw vraag). In de functie wordt de juiste kolom gebruikt op basis van het resultaat van het evalueren van die subquery, dus u gebruikt alleen een verwijzing naar de alias van de subquery en de (alias van de) kolom in de subquery.