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

时间:2018-04-20 11:10:48

标签: 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'

我出错了吗?

1 个答案:

答案 0 :(得分:1)

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

  

普通比较运算符产生null(表示“未知”),而不是   当任一输入为空时,为true或false。例如,7 = NULL产生   null,7<>空值。如果此行为不合适,请使用   IS [NOT] DISTINCT FROM谓词:

类似的东西:

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

应该有效