PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Extrahieren Sie Schlüssel und Wert aus JSON-Objekten in Postgres

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.