我有一个名为clubs的表,下面是该表中的一些相关列:

COLUMN_NAME     DATA_TYPE  IS_NULLABLE  
id              uuid       NO
general_fields  jsonb      YES

我还有一个名为plans的表,这是这个表中的一些相关列:

COLUMN_NAME                 DATA_TYPE  IS_NULLABLE  
id                          uuid       NO
club_id                     uuid       NO
hide_in_online_application  bool       YES

一个俱乐部可以有多种计划.

我想写一个查询,将clubs表中那些只有hide_in_online_applicationTRUE的计划的俱乐部的general_字段中的布尔类型allow_applications更新为FALSE

查询的内容如下:

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)

Sql相关问答推荐

具有2个共享列的两个表的Amazon RSQL合并

在Golang中管理数据库事务的简洁方法

为什么两个不同的窗口函数给出不同的排序结果?

仅当交叉应用返回单值时才更新记录

比较SQL中以逗号分隔的字符串

当我返回 sql 列时,有没有办法只反转数字? ( hebrew )

我可以在 T-SQL (SQL Server) 的函数内使用 OPTION 子句吗?

基于 Snowflake 的最大值创建新列

try 将多行折叠为单个结果

SQL - 只需要 GROUP BY SELECT 的一列

如何按日期和位置对最近 3 个报告日期的 SQL 查询结果进行透视?

Select 给定类别列表(或更多类别)中的所有事物

连续几天购买的客户

在 SQL 的每行选项中 Select 最大值

CURRENT_ROW 窗口框架上的 SQL 滞后

交叉应用 OPENJSON / PIVOT - 错误的顺序

sql count distinct by column 和 sum false 和 true

使用 JSON_BUILD_OBJ 从 Postgres 返回 JSON

PostgreSQL Select 具有两列的自引用

SQLite 中标识符周围的方括号是什么意思?