如何在JSONB中查询空数组?

19

考虑这个例子:

postgres=# CREATE TABLE emptyarray (fields jsonb);                                                                                                                            
CREATE TABLE                                                                                                                                                                  
postgres=# INSERT INTO emptyarray VALUES ('{"key":["a","b"]}');                                                                                                               
INSERT 0 1                                                                                                                                                                    
postgres=# INSERT INTO emptyarray VALUES ('{"key":[]}');                                                                                                                      
INSERT 0 1                                                                                                                                                                    
postgres=# SELECT * from emptyarray where Fields@>'{"key":["b"]}';                                                                                                            
       fields                                                                                                                                                                 
---------------------                                                                                                                                                         
 {"key": ["a", "b"]}                                                                                                                                                          
(1 row)                                                                                                                                                                       

postgres=# SELECT * from emptyarray where Fields@>'{"key":[]}';                                                                                                               
       fields                                                                                                                                                                 
---------------------                                                                                                                                                         
 {"key": ["a", "b"]}                                                                                                                                                          
 {"key": []}                                                                                                                                                                  
(2 rows)

在第二个查询中,我预期结果只有一行(即具有空数组的一个记录)。但是如您所见,结果中有两行。我该如何使用@>语法查询空数组?

我正在使用PostgreSQL 9.6。

1个回答

25

您可以使用:

SELECT * from emptyarray where Fields-> 'key' = '[]'::jsonb;

Rextester演示


谢谢!所以,@> 语法对于空数组不起作用? - baijum
@baijum 嗯,我不能百分之百确定。我只是提出了另一种选择。 - Lukasz Szozda
我正在生成查询,因此使用一致的语法会更容易 :( - baijum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接