我正在try 编写一个UPDATE查询来更新所有拥有一只名为"Mark"的狗的用户,该表有一个名为"Additional_Options"的列,它是一个Json BLOB,如下所示

{
'dog_name': 'Mark'
}

现在我有

update "Employees" e set country = "BR" where json_extract_path(e.additional_options, "dog_name") = "Mark"

我使用这个postgres functions found here来构建它,但现在我得到一个错误

column "dog_name" does not exist

有没有人能帮我弄清楚为什么这不管用?

编辑: 如果它有帮助,我使用Prisma编写了这个查询,并且它起作用了


export const moveToBrazil = async(): Promise<Employee[]> => {
    await db.employees.updateMany({
        where: {
            additional_options: {
                path: ['dog_name'],
                equals: 'Ellie'
            }
        },
        data: {
            country: "BR"
        }
    });
    return db.employees.findMany({
        where: {
            additional_options: {
                path: ['dog_name'],
                equals: 'Ellie'
            }
        },
    });
}

推荐答案

您可以使用->>运算符以文本形式获取json对象字段.类似于:

UPDATE "Employees" e SET country = 'BR' WHERE e.additional_options->>'dog_name' = 'Mark';

->>操作符获得JSON对象字段106.如果additional_optionsjsonb列,而dog_name是JSON中关键字,则additional_options->>'dog_name'将以文本的形式获得值dog_name.

一百零二

REFERENCE

Sql相关问答推荐

当编号和版本的唯一状态更改时报告

对于表A中的每一行,更新表B中与金额有关的行

从以前的非空值行中获取值

从列中提取子字符串的ORDER BY CASE语句

如何实现同一列的递归计算?

在MS Access Modern图表的X轴上显示时间值时遇到问题

Redshift PL/pgSQL循环中的参数化列名

更正用于判断错误组合的SQL

SQL查询正在工作,但返回空结果

SQL OR子句如何在JOINON查询中工作?

根据日期 Select ID 的上一条记录

每个分组最多 Select 最后 2 个值并并排显示它们

在同一列上迭代时计算持续时间

除了风格之外,还有什么理由更喜欢简单的CASE WHEN而不是搜索呢?

如何从三个连接表中获取数据,并始终显示第一个表中的数据,以及第三个表中的空值或现有记录?

SQL Server:时态表并在运行时添加计算列

SQL 多个不满足的条件失败

HIVE SQL where 子句未按预期工作

具有日期时间条件的存储过程

在 Snowflake SQL 中计算通货inflating 率