组合多个json输出查询

时间:2018-05-07 09:38:14

标签: json postgresql

查询1:

UPDATE liaison
SET content = replace( replace( content::varchar, content->>'important_maintenance_problem_id', '{' || (content->>'important_maintenance_problem_id') || '}' ), 'important_maintenance_problem_id', 'important_maintenance_problem_ids' )::JSON
WHERE
content ? 'important_maintenance_problem_id';

查询2:

UPDATE liaison
SET content = replace( replace( content::varchar, content->>'urgent_maintenance_problem_id', '{' || (content->>'urgent_maintenance_problem_id') || '}' ), 'urgent_maintenance_problem_id', 'urgent_maintenance_problem_ids' )::JSON
WHERE
content ? 'urgent_maintenance_problem_id';

在这两个查询中,我分别将important_maintenance_problem_id的json数据更新为important_maintenace_problem_ids,并将urgent_maintenance_problem_id更新为urgent_maintenance_problem_ids。有什么方法可以将这个查询结合起来吗?我试过,但因为我们使用相同的内容因此无法合并。

1 个答案:

答案 0 :(得分:0)

由于两个更新查询都使用相同的表,因此可以将它们组合成一个带有CASE END子句的查询。

UPDATE
 liaison

SET content = (
        CASE
          WHEN content ? 'important_maintenance_problem_id'
          THEN replace( replace( content::varchar, content->>'important_maintenance_problem_id', '{' || (content->>'important_maintenance_problem_id') || '}' ), 'important_maintenance_problem_id', 'important_maintenance_problem_ids' )::JSON

           WHEN content ? 'urgent_maintenance_problem_id'
           THEN replace( replace( content::varchar, content->>'urgent_maintenance_problem_id', '{' || (content->>'urgent_maintenance_problem_id') || '}' ), 'urgent_maintenance_problem_id', 'urgent_maintenance_problem_ids' )::JSON

            ELSE 
              content 
        END
      )

WHERE
   content ? 'important_maintenance_problem_id'
 OR
   content ? 'urgent_maintenance_problem_id'