给定一组数据。
1 | { 'completed': true }
2 | { 'office_completed': false }
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以查询office_completed != 'true'并返回两条记录?还是选择所有没有office_completed键的记录的方法?我可以使用以下命令查询所有具有office_completed键的记录:
SELECT * FROM jsonb WHERE data ? 'office_completed';
但是找不到相反的方法。
导致我遇到这个问题的原因是,我有一个可能有或没有office_completed键的数据集,我需要查询所有具有office_completed != 'true'键的记录,但是如果键不存在,那么我将一无所获。如果密钥不存在,我认为那应该算是,!=true但显然不存在。:-)我想到了另一种选择是选择所有没有office_completed键或office_completed != 'true'但无法弄清楚该怎么做的记录。
如果有人对此有更好的主意,我将不胜感激。谢谢!
小智 12
仅供参考。
如果要查找所有记录没有键,则只需使用NOT()这样的键:
SELECT * FROM jsonb WHERE NOT( data ? 'office_completed' );
Run Code Online (Sandbox Code Playgroud)
使用coalesce():
select *
from jsonb
where coalesce(data->>'office_completed', 'false') <> 'true';
id | data
----+-----------------------------
1 | {"completed": true}
2 | {"office_completed": false}
(2 rows)
Run Code Online (Sandbox Code Playgroud)
看看它怎么运作:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |