SELECT q.id, d.key, d.value
FROM q
JOIN json_each_text(q.data) d ON true
ORDER BY 1, 2;
Funkcja json_each_text() jest funkcją zwracającą zestaw, więc powinieneś używać jej jako źródła wiersza. Dane wyjściowe funkcji są tutaj połączone bocznie
do tabeli q , co oznacza, że dla każdego wiersza w tabeli każdy (key, value) sparuj z data kolumna jest połączona tylko z tym wierszem, więc relacja między oryginalnym wierszem a wierszami utworzonymi z json obiekt jest utrzymywany.
Tabela q może być również bardzo skomplikowanym podzapytaniem (lub VALUES klauzula, jak w Twoim pytaniu). W funkcji używana jest odpowiednia kolumna z wyniku oceny tego podzapytania, więc używasz tylko odwołania do aliasu podzapytania i kolumny (aliasu) w podzapytaniu.