使用 PostgreSQL 根据第二个 table 中的列更新一个 table 中的 jsonb 列

Updating jsonb column in one table based on a column in second table using PostgreSQL

我有一个名为 clubs 的 table,这些是此 table 中的一些相关专栏:

COLUMN_NAME     DATA_TYPE  IS_NULLABLE  
id              uuid       NO
general_fields  jsonb      YES

我还有一个名为 plans 的 table,这些是 table:

中的一些相关专栏
COLUMN_NAME                 DATA_TYPE  IS_NULLABLE  
id                          uuid       NO
club_id                     uuid       NO
hide_in_online_application  bool       YES

一个俱乐部可以有多个计划。

我想编写一个查询,将 allow_applications 中的布尔类型更新为 FALSE 列 general_fields 中的那些俱乐部 clubs table 只有 hide_in_online_applicationTRUE

的计划

查询将包含如下内容:

UPDATE clubs
SET general_fields = jsonb_set(general_fields, '{allow_applications}', '"false"')
+ the condition where clubs has no plans
+ the condition where all plans from clubs are hide_in_online_application == true

实现此目标的最佳方法是什么?

UPDATE clubs
SET general_fields = jsonb_set(general_fields, '{allow_applications}', '"false"')
WHERE EXISTS(SELECT 1 FROM plans WHERE clubs.id = plans.club_id AND plans.hide_in_online_application = true)
AND NOT EXISTS(SELECT 1 FROM plans WHERE clubs.id = plans.club_id AND plans.hide_in_online_application = false)