需要检查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'
我出错了吗?
答案 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
应该有效