2017-09-27 7 views
2

Betrachten dieses Beispiel:Wie Abfrage für leeres Array in JSONB?

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 [email protected]>'{"key":["b"]}';                            
     fields                                         
---------------------                                       
{"key": ["a", "b"]}                                       
(1 row)                                          

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

In der zweiten Abfrage I nur eine Zeile in den Ergebnissen (der ein Datensatz mit leeren Array) erwartet. Aber wie Sie sehen können, gibt es zwei Zeilen im Ergebnis. Wie frage ich nach einem leeren Array mit @> Syntax?

Ich bin mit PostgreSQL 9.6

Antwort

1

Sie verwenden:

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

Rextester Demo

+0

Dank! Also wird die '@>' Syntax nicht für leere Arrays funktionieren? – baijum

+0

@baijum Nun, ich könnte nicht 100% sicher sagen. Ich schlage nur eine Alternative vor. – lad2025

+0

Ich erzeugte die Abfragen, also wäre eine konsistente Syntax einfacher gewesen :( – baijum

Verwandte Themen