使用部分JSON列更新新列

时间:2014-07-28 23:38:35

标签: sql json postgresql sql-update

我有一个名为'分类器的json专栏'使用这样的数据:

[ { "category": "Building & Trades", "type": "Services"
  , "subcategory": "Construction" } ]

我想拉出每个元素并插入标题为同一行的列中,例如' category',' type'和'子类别'。

此查询提取了我想要的内容,在这种情况下'类别':

SELECT parts->'category' AS category
FROM (SELECT json_array_elements(classifiers) AS parts FROM <tablename>) AS more_parts

我无法弄清楚&#39; WHERE&#39;部分在UPDATE / SET / WHERE类型的查询中,例如:

UPDATE <table>
SET category = (SELECT parts->'category' AS category
                FROM (SELECT json_array_elements(classifiers) AS parts
                      FROM <tablename>
                     ) AS more_parts
               ) WHERE ???

如果没有WHERE,则会返回多行。

1 个答案:

答案 0 :(得分:0)

  

我想拉出每个元素并插入到相同的列中   例如,标题为&#39; category&#39;,&#39; type&#39;和&#39;子类别&#39;。

听起来你真的想要这个:

UPDATE tbl
SET    category = classifiers->0->'category'
      ,type = classifiers->0->'type'
      ,subcategory = classifiers->0->'subcategory'

更新所有行。需要Postgres 9.3 +。

  • 第一个运算符->0尊重数组中唯一的对象(json数组索引从0开始,与Postgres数组不同,默认情况下从1开始)。
  • 第二个运算符->'category'从对象中获取字段。

Refer to the manual here.