2017-03-03 63 views
1
CREATE TABLE tableTestJSON (
    id serial primary key, 
    data jsonb 
); 

INSERT INTO tableTestJSON (data) VALUES 
('{}'), 
('{"a": 1}'), 
('{"a": 2, "b": ["c", "d"]}'), 
('{"a": 1, "b": {"c": "d", "e": true}}'), 
('{"b": 2}'); 

我可以选择值。这没有问题。查询JSON PostgreSQL

SELECT * FROM tableTestJSON; 

我可以测试两个JSON对象是否与此查询相同。

SELECT * FROM tableTestJSON WHERE data = '{"a":1}'; 

此查询的输出是:

ID |数据 ---- + ------ 1 | {“一”:1} (1行)

但我有一个问题: 可以说我有一栏:

{a: 30} 
{a: 40} 
{a: 50} 

在这种情况下,我怎么能查询所有包含的元素a = 30或a = 40。我无法找到'or'的任何解决方案,例如

select * from table where a in (10,20); // ?? 

或 我该如何查询这种情况?

回答

1

提取使用the operator ->> JSON对象的值:

select * 
from tabletestjson 
where (data->>'a')::int in (1, 2) 

id |     data     
----+-------------------------------------- 
    2 | {"a": 1} 
    3 | {"a": 2, "b": ["c", "d"]} 
    4 | {"a": 1, "b": {"c": "d", "e": true}} 
(3 rows) 
+0

另外我测试另一asnwer这样。 Like this query:SELECT * FROM tableTestJSON WHERE data#>'{a}'IN('10','20'); 谢谢。 – aemre