查询键不存在的 Postgres JSONB
Query Postgres JSONB where key doesn't exist
给定一组数据。
1 | { 'completed': true }
2 | { 'office_completed': false }
有没有办法查询 office_completed != 'true'
并拥有 return 两条记录?或者 select 所有没有 office_completed
键的记录的方法?我可以查询所有具有 office_completed
键的记录:
SELECT * FROM jsonb WHERE data ? 'office_completed';
但是找不到拉对面的方法
让我遇到这个问题的原因是我的数据集可能有也可能没有 office_completed
键,我需要查询所有有 office_completed != 'true'
的记录,但如果键没有'存在我从中一无所获。如果密钥不存在,我认为这将算作 !=true
但它显然不存在。 :-) 我想另一种方法是 select 所有没有 office_completed
键或 office_completed != 'true'
但不知道该怎么做的记录。
如果有人对此有更好的想法,我将不胜感激。谢谢!
使用coalesce():
select *
from jsonb
where coalesce(data->>'office_completed', 'false') <> 'true';
id | data
----+-----------------------------
1 | {"completed": true}
2 | {"office_completed": false}
(2 rows)
看看它是如何工作的:
select *, data->>'office_completed' as value, coalesce(data->>'office_completed', 'false')
from jsonb
where coalesce(data->>'office_completed', 'false') <> 'true';
id | data | value | coalesce
----+-----------------------------+-------+----------
1 | {"completed": true} | | false
2 | {"office_completed": false} | false | false
(2 rows)
仅供参考post.
如果要查找所有没有键的记录,只需像这样使用 NOT():
SELECT * FROM jsonb WHERE NOT( data ? 'office_completed' );
给定一组数据。
1 | { 'completed': true }
2 | { 'office_completed': false }
有没有办法查询 office_completed != 'true'
并拥有 return 两条记录?或者 select 所有没有 office_completed
键的记录的方法?我可以查询所有具有 office_completed
键的记录:
SELECT * FROM jsonb WHERE data ? 'office_completed';
但是找不到拉对面的方法
让我遇到这个问题的原因是我的数据集可能有也可能没有 office_completed
键,我需要查询所有有 office_completed != 'true'
的记录,但如果键没有'存在我从中一无所获。如果密钥不存在,我认为这将算作 !=true
但它显然不存在。 :-) 我想另一种方法是 select 所有没有 office_completed
键或 office_completed != 'true'
但不知道该怎么做的记录。
如果有人对此有更好的想法,我将不胜感激。谢谢!
使用coalesce():
select *
from jsonb
where coalesce(data->>'office_completed', 'false') <> 'true';
id | data
----+-----------------------------
1 | {"completed": true}
2 | {"office_completed": false}
(2 rows)
看看它是如何工作的:
select *, data->>'office_completed' as value, coalesce(data->>'office_completed', 'false')
from jsonb
where coalesce(data->>'office_completed', 'false') <> 'true';
id | data | value | coalesce
----+-----------------------------+-------+----------
1 | {"completed": true} | | false
2 | {"office_completed": false} | false | false
(2 rows)
仅供参考post.
如果要查找所有没有键的记录,只需像这样使用 NOT():
SELECT * FROM jsonb WHERE NOT( data ? 'office_completed' );