我有一个表Category
,其中有一个jsonb列scope :include_all, -> { includes(trackable -> { include_all } ) }
。
items
列类似于data
。
如何选择data
仅具有键{"name": "aaa", "age": 23, "job": "dev"}
,data
的项目?
答案 0 :(得分:0)
您可以使用?
和?&
运算符。
对于您的用例,它将是:
SELECT * FROM table WHERE (NOT data ? 'job') AND (data ?& array ['name', 'age'])
答案 1 :(得分:0)
使用delete operator -
,例如:
with items (data) as (
values
('{"name": "aaa", "age": 23}'::jsonb),
('{"name": "aaa", "age": 23, "job": "dev"}'),
('{"name": "aaa", "age": 23, "gender": "f"}')
)
select *
from items
where data - 'name'- 'age' = '{}'
data
----------------------------
{"age": 23, "name": "aaa"}
(1 row)
在Postgres 10+中,您可以使用文本数组:
select *
from items
where data - array['name', 'age'] = '{}'