15

Postgresql 9.3betaにアップグレードしました。json_eachまたはjson_each_text関数を json 列に適用すると、結果は列名が'key'および'value'の行のセットになります。

次に例を示します。

名前の付いたテーブルがcustomersあり、education列のタイプはjson

Customers テーブルは次のとおりです。

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

クエリ

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

次の列名を持つ一連の行を返します

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

関数はデフォルトでと列名json_each_textを持つ行のセットを返すためです。keyvalue

ただし、やjson_each_textなどのカスタム列名を返したい:key1key2

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

これらの関数を適用した後、 「key1」「value1」などの異なる列名を取得する方法はありますか?

4

1 に答える 1

41

FROM 句と SELECT 句で AS を使用することで解決できます。

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)
于 2013-05-20T22:54:36.740 に答える