SELECT q.id, d.key, d.value
FROM q
JOIN json_each_text(q.data) d ON true
ORDER BY 1, 2;
La funzione json_each_text()
è una funzione di ritorno di un set, quindi dovresti usarla come origine di riga. L'output della funzione è qui unito lateralmente
alla tabella q
, il che significa che per ogni riga della tabella, ogni (key, value)
coppia dai data
colonna è unita solo a quella riga, quindi la relazione tra la riga originale e le righe formate da json
oggetto viene mantenuto.
La tabella q
può anche essere una sottoquery molto complicata (o un VALUES
clausola, come nella tua domanda). Nella funzione, viene utilizzata la colonna appropriata dal risultato della valutazione di quella sottoquery, quindi si utilizza solo un riferimento all'alias della sottoquery e alla colonna (alias della) nella sottoquery.