如何为 json 中缺少的属性构建 postgres json 查询?

eki*_*nov 4 sql postgresql json

我有一个表 A,其中 b 列为 jsonb

        b
------------------
 {"c": 1}
 {"c": 1, "d": 2}
Run Code Online (Sandbox Code Playgroud)

如何为缺少 d 的行构建查询?

SELECT * FROM A WHERE b@>'{"c":1}';
Run Code Online (Sandbox Code Playgroud)

返回所有行,同时

SELECT * FROM A WHERE b@>'{"c":1,"d":null}';
Run Code Online (Sandbox Code Playgroud)

返回无(由于第一行中的 d 不为空);

小智 5

您可以使用? 运算符来测试密钥是否存在。要查找键不存在的那些,您可以对表达式求反:

select *
from a 
where not b ? 'd';
Run Code Online (Sandbox Code Playgroud)