SELECT q.id, d.key, d.value
FROM q
JOIN json_each_text(q.data) d ON true
ORDER BY 1, 2;
La fonction json_each_text()
est une fonction de retour d'ensemble, vous devez donc l'utiliser comme source de ligne. La sortie de la fonction est ici joint latéralement
au tableau q
, ce qui signifie que pour chaque ligne du tableau, chaque (key, value)
paire à partir des data
la colonne est jointe uniquement à cette ligne, de sorte que la relation entre la ligne d'origine et les lignes formées à partir du json
l'objet est maintenu.
Le tableau q
peut aussi être une sous-requête très compliquée (ou un VALUES
clause, comme dans votre question). Dans la fonction, la colonne appropriée est utilisée à partir du résultat de l'évaluation de cette sous-requête, vous n'utilisez donc qu'une référence à l'alias de la sous-requête et à (l'alias de) la colonne dans la sous-requête.