【发布时间】:2018-04-20 11:10:48
【问题描述】:
需要检查 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'
我有什么问题吗?
【问题讨论】:
-
worker_ids数组包含 1,那么您为什么期待结果? -
其他
worker_ids字段是否为NULL? -
与 null 的比较给出 null,不是 true 或 false,所以
not null ? value不是 false,因此不会返回 -
@eurotrash true :) 我认为这很明显,因为当您知道它们都是正确的时,询问 为什么没有为 false 返回行 会很奇怪。但是,是的,你是对的 - 这是合乎逻辑的,并不明显
标签: sql arrays postgresql jsonb