2016-09-28 20 views
5

Postgre'leri jsonb sütun türleriyle deniyorum ve şimdiye kadar çok iyi. Ben kullanıyorum yaygın bir sorgu şu şekildedir:Postgres jsonb 'NOT içerir' işleci

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

Bunu nasıl tersine çeviririz? Farklı bir operatör var mı veya sadece

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

Hayır, hayır adanmış operatör bunun için vardır. 'NOT'un nesi var? – redneb

+0

@redneb Sorun şu ki, "DEĞİL" çalışmıyor. Öznitelikleri - >> 'Şehir' <> 'Mesa' formülasyonunu kullanmak da işe yaramıyor. – eykanal

+0

@eykanal 'NOT' [oldukça iyi çalışıyor] (http://rextester.com/TMGVQZ95259). – pozs

cevap

1

Bu, birkaç koşulla başarılabilir. Zarif değil ama bunu yapmak için başka bir yol bulamadım.

Yani, ilk olarak, 'Şehir' özelliğine sahip olmayan her satırı alın ve ardından doğru alan değerini kontrol etmek için 'VEYA' koşulunu ekleyin.

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

'Şehir' olmadığı bu arayacaktır operatörünü <@ kullanabilirsiniz 'Mesa'

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