2016-09-28 18 views
5

Tôi đang thử nghiệm với các loại cột sau jsonb và cho đến nay rất tốt. Một truy vấn phổ biến mà tôi đang sử dụng là như sau:Postgres jsonb 'KHÔNG chứa' toán tử

select count(*) from jsonbtest WHERE attributes @> '{"City":"Mesa"}'; 

Làm cách nào để đảo ngược điều đó? Có một toán tử khác hoặc đơn giản được sử dụng như là

select count(*) from jsonbtest WHERE NOT attributes @> '{"City":"Mesa"}'; 
+3

Không, không có nhà điều hành dành riêng cho điều đó. Có gì sai với 'KHÔNG'? – redneb

+0

@redneb Vấn đề là 'NOT' không hoạt động. Sử dụng công thức 'attributes - >> 'City' <> 'Mesa'' cũng không hoạt động. – eykanal

+0

@eykanal 'NOT' [hoạt động khá tốt] (http://rextester.com/TMGVQZ95259). – pozs

Trả lời

1

Điều này có thể đạt được với một số điều kiện. Nó không thanh lịch nhưng tôi không tìm cách khác để làm như vậy.

Vì vậy, trước tiên, hãy nhận mọi hàng đơn giản không có thuộc tính 'Thành phố' và sau đó thêm điều kiện 'HOẶC' để kiểm tra giá trị trường chính xác.

select count(*) from jsonbtest where 
    NOT(attributes ? 'City') 
    OR (attributes ? 'City') is NULL -- this is required if attributes can be null 
    OR (attributes->>'City' != 'Mesa')) 
0

Bạn có thể sử dụng toán tử <@ này sẽ tìm kiếm nơi 'Thành phố' không phải là 'Mesa'

select count(*) from jsonbtest WHERE attributes <@ '{"City":"Mesa"}'; 
Các vấn đề liên quan