如何在postgreSQL中根据不同条件对JSON列执行多个操作?

问题描述 投票:0回答:1

我在 postgreSQL 中有一个类型为 jsonb 的“属性”列,我想根据表中其他列的值修改不同键的值。

但是,我不明白如何根据彼此之间不链接的不同条件对同一个 jsonb 执行多个操作。

例如,如果我的表的“product”列为空,我想将“properties”列的“product”键更新为“false”,如果该列为空,则将“reference”键更新为“false”我的表的“引用”为空。 这是我在“属性”栏中的内容示例。

{
    "product" : "true"  
    "reference": "true"
}

我尝试一次执行一项操作,但这似乎不是一个好方法,因为我有很多列需要更新。 此外,我尝试搜索嵌套查询,但并不完全符合我的需要。

postgresql
1个回答
0
投票

您可以使用 PostgreSQL 中的 jsonb_set 函数来实现这一点。以下是您如何根据您描述的条件更新“产品”和“参考”键:

更新你的_表 设置属性 = jsonb_set( jsonb_set( 特性, '{产品}', to_jsonb(CASE WHEN "product" IS NULL THEN false ELSE true END) ), '{参考}', to_jsonb(CASE WHEN "reference" IS NULL THEN false ELSE true END) );

如果表中的“product”列为空,则此 SQL 查询将“product”键更新为 false;如果“reference”列为空,则此 SQL 查询将“reference”键更新为 false。它通过使用 jsonb_set 函数修改存储在表的“属性”列中的 JSON 对象来实现此目的。

您可以根据需要扩展此查询以包含其他键和条件。只需在 jsonb_set 函数调用中添加更多 jsonb_set 函数,每个函数都有自己的条件和要更新的键。

© www.soinside.com 2019 - 2024. All rights reserved.