sql - Postgres 检查 jsonb 数组是否不包含值返回空结果集

标签 sql arrays postgresql jsonb

需要检查 jsonb 列是否包含值。 Jsonb 字段是一个简单的数组:

ALTER TABLE task ADD COLUMN worker_ids jsonb;

UPDATE task SET worker_ids = '["1", "2"]' WHERE ...

然后尝试运行查询来检查它是否包含具体值:

检查 jsonb 是否包含值的查询 - 工作正常并返回正确的行集

 SELECT * FROM task WHERE worker_ids ? '1'

然而,当我将 NOT 添加到 where 条件查询时,什么都不返回:

 SELECT * FROM task WHERE NOT worker_ids ? '1'

我是不是弄错了什么?

最佳答案

https://www.postgresql.org/docs/current/static/functions-comparison.html

Ordinary comparison operators yield null (signifying “unknown”), not true or false, when either input is null. For example, 7 = NULL yields null, as does 7 <> NULL. When this behavior is not suitable, use the IS [ NOT ] DISTINCT FROM predicates:

类似于:

SELECT * FROM task WHERE (worker_ids ? '1') is distinct from true

应该可以

关于sql - Postgres 检查 jsonb 数组是否不包含值返回空结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49940344/

相关文章:

mysql - 帖子的多重评级系统(喜欢,爱,星)

java - 合并排序是重复数组条目

java - 如何从特定位置将数组发送到方法

SQL:如何从连接表中检索总金额?

python - 在 SQL 连接中使用 Pandas Dataframe

c# - SQL查询使用C#返回太多相同的列数据

sql - 如何将多行查询结果合并为一行

java - 如何在 Java 中使用 BufferedImage 更改模拟时钟的钟面

python - 为什么我不能安装 psycopg2? (Python 2.6.4、PostgreSQL 8.4、OS X 10.6.3)

mysql - 对数字范围 mysql 执行计算