我正在使用postgres 9.4和jsonb类型。我有下表:
CREATE TABLE jsonb_test (iid serial NOT NULL, data jsonb)
该表中的以下json数据:
{"date": "2016-01-01T00:00:00.000Z", "items": [{"name": "bottles", "price": 12}, {"name": "caps", "price": 20}], "customer": {"name": "Customer 1", "email": "customer1@gmail.com"}}
{"date": "2015-12-01T00:00:00.000Z", "items": [{"name": "bottles", "price": 1}, {"name": "caps", "price": 50}], "customer": {"name": "Customer 2", "email": "customer2@gmail.com"}}
我想要的是获取所有具有价格大于30的商品的行。在这种情况下,它将返回客户2行。
这是我目前的查询:
SELECT * FROM jsonb_test WHERE jsonb_array_elements(jsonb_extract_path(data, 'items')) #> '{price}' > '0'
但这失败了,错误为ERROR: argument of WHERE must not return a set
谁能告诉我怎么做?是否可以为任意级别的嵌套执行此操作?
谢谢!
答案 0 :(得分:0)
尝试这样的事情:
SELECT * FROM jsonb_test, jsonb_array_elements(jsonb_test.data->'items') AS a WHERE (a->>'price') > '0'
答案 1 :(得分:0)
Tyr this:
SELECT * FROM json_test WHERE jsonb_test.data #> '{items,price}' > '30';
我要做的是:给我一些对象,其中元素项具有元素价格等于整数'1'的子对象。
在此处查看一些示例:http://schinckel.net/2014/05/25/querying-json-in-postgres/