Sql 使用JSON列的一部分更新新列

Sql 使用JSON列的一部分更新新列,sql,json,postgresql,sql-update,Sql,Json,Postgresql,Sql Update,我有一个名为“分类器”的json专栏,其中包含如下数据: [ { "category": "Building & Trades", "type": "Services" , "subcategory": "Construction" } ] 我想将每个元素拉入同一行的列中,例如,“category”、“type”和“subcategory” 此查询提取出我想要的内容,在本例中为“类别”: SELECT parts->'category' AS category FROM (S

我有一个名为“分类器”的json专栏,其中包含如下数据:

[ { "category": "Building & Trades", "type": "Services"
  , "subcategory": "Construction" } ]
我想将每个元素拉入同一行的列中,例如,“category”、“type”和“subcategory”

此查询提取出我想要的内容,在本例中为“类别”:

SELECT parts->'category' AS category
FROM (SELECT json_array_elements(classifiers) AS parts FROM <tablename>) AS more_parts
我无法确定更新/设置/位置查询类型中的“位置”部分,例如:

UPDATE <table>
SET category = (SELECT parts->'category' AS category
                FROM (SELECT json_array_elements(classifiers) AS parts
                      FROM <tablename>
                     ) AS more_parts
               ) WHERE ???
没有返回多行的位置

我想将每个元素拉入同一行中的列中 标题为“类别”、“类型”和“子类别”的行

听起来你真的想要这个:

UPDATE tbl
SET    category = classifiers->0->'category'
      ,type = classifiers->0->'type'
      ,subcategory = classifiers->0->'subcategory'
更新所有行。要求博士后9.3以上

第一个操作符->0尊重数组json数组索引中从0开始的唯一对象,不同于Postgres数组,后者默认从1开始。 第二个操作符->'category'从对象获取字段。
你的博士后版本?json_数组_元素返回一组值。你必须以某种方式定义选择哪一个。如果只有一个函数/运算符,请使用其他函数/运算符。Postgres 9.3。谢谢你的回答。