使用 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_application
为 TRUE
的计划
查询将包含如下内容:
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)
我有一个名为 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_application
为 TRUE
查询将包含如下内容:
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)