2013-05-20 12 views
8

Właśnie zaktualizowałem do PostgreSQL 9.3beta. Kiedy stosuje json_each lub json_each_text funkcje do kolumny json, wynik jest zbiorem wierszy z nazwy kolumn „klucz” i „wartość”.json_each i json_each_text wyniki z różnymi nazwami kolumn

Oto przykład:

Mam tabeli o nazwie customers i education kolumna jest typu json

Klienci tabela wygląda następująco:

---------------------------------------------------------------------- 
| id | first_name | last_name | education        | 
---- ------------ ----------- ---------------------------------------- 
| 1 | Harold  | Finch  | {\"school\":\"KSU\",\"state\":\"KS\"} | 
---------------------------------------------------------------------- 
| 2 | John  | Reese  | {\"school\":\"NYSU\",\"state\":\"NY\"} | 
---------------------------------------------------------------------- 

Zapytanie

select * from customers, json_each_text(customers.education) where value = 'NYSU' 

zwraca zbiór wierszy o następujących nazwach kolumn

--------------------------------------------------------------------------------------- 
| id | first_name | last_name | education        | key | value | 
---- ------------ ----------- ---------------------------------------- -------- ------- 
| 2 | John  | Reese  | {\"school\":\"NYSU\",\"state\":\"NY\"} | school | NYSU | 
--------------------------------------------------------------------------------------- 

ponieważ json_each_text funkcja zwraca zestaw wierszy z key i value nazw kolumn domyślnie.

Jednakże chcę json_each_text powrót zwyczaj kolumn nazwy, takie jak key1 i key2:

----------------------------------------------------------------------------------------- 
| id | first_name | last_name | education        | key1 | value1 | 
---- ------------ ----------- ---------------------------------------- -------- --------- 
| 2 | John  | Reese  | {\"school\":\"NYSU\",\"state\":\"NY\"} | school | NYSU | 
----------------------------------------------------------------------------------------- 

Czy istnieje sposób, aby uzyskać różne nazwy kolumn jak „key1” i „wartość1” po zastosowaniu te funkcje?

+0

Proszę podać przykładowe dane, rzeczywiste zapytania i dokładnych wyników. –

+0

OK, dodałem przykład. Czy teraz jest jasne? –

+0

Chociaż teoretycznie mogę sobie wyobrazić, co się dzieje, potrzebujemy, jak napisał Craig, ** przykładowe dane **. Abyśmy mogli zobaczyć, co widzisz. –

Odpowiedz

18

które można rozwiązać za pomocą AS SELECT w klauzula FROM i:

postgres=# SELECT json_data.key AS key1, 
        json_data.value AS value1 
      FROM customers, 
       json_each_text(customers.education) AS json_data 
      WHERE value = 'NYSU'; 
    key1 | value1 
--------+-------- 
school | NYSU 
(1 row) 
+0

Zaintrygowany ... nie potrzebujesz do tego celu "LATERAL"? –

+0

Pytanie brzmiało, jak można uzyskać różne nazwy kolumn po zastosowaniu funkcji ... Czy tęskniłem za czymś? – michaelpq

+6

Nie, po prostu zaskoczony, że działa. Nie powinieneś mieć możliwości odwoływania się do kolumn jednej tabeli w innym wpisie w tej samej klauzuli FROM bez LATERALNEJ. Aaah, oto dlaczego działa: http://www.postgresql.org/message-id/[email protected] –

Powiązane problemy