SELECT q.id, d.key, d.value
FROM q
JOIN json_each_text(q.data) d ON true
ORDER BY 1, 2;
Die Funktion json_each_text()
ist eine Satzrückgabefunktion, daher sollten Sie sie als Zeilenquelle verwenden. Die Ausgabe der Funktion wird hier seitlich angefügt
in die Tabelle q
, was bedeutet, dass für jede Zeile in der Tabelle jeder (key, value)
Paar aus den data
-Spalte wird nur mit dieser Zeile verbunden, sodass die Beziehung zwischen der ursprünglichen Zeile und den Zeilen, die aus dem json
gebildet werden, besteht Objekt wird beibehalten.
Die Tabelle q
kann auch eine sehr komplizierte Unterabfrage sein (oder ein VALUES
Klausel, wie in Ihrer Frage). In der Funktion wird die entsprechende Spalte aus dem Ergebnis der Auswertung dieser Unterabfrage verwendet, sodass Sie nur einen Verweis auf den Alias der Unterabfrage und die Spalte (Alias der) in der Unterabfrage verwenden.