【发布时间】:2019-02-19 14:42:45
【问题描述】:
我有一个包含 2 列 R(id int,dat jsonb) 的表。 b 列 jsonb 由一个二维数组 [][] 组成。例如:
id| dat
1 | {"name":"a","numbers":[[1,2],[3,4],[5,6],[1,3]]}
2 | {"age":5,"numbers":[[1,1]]}
3 | {"numbers":[[5,6],[6,7]]}
我正在尝试在其中一个子数组中查找包含特定数字的所有 id。我使用了 2 个解决方案,我想了解为什么第一个不起作用:
1)
select * from R
where exists (
select from jsonb_array_elements(R.dat->'numbers')->>0 first,jsonb_array_elements(range.data->'numbers')->>1 second where first::decimal= 1 and second::decimal= 1
);
ERROR: syntax error at or near "->>"
LINE 3: ...t from jsonb_array_elements(R.dat->'numbers')->>0 first,j...
SELECT *
FROM R
WHERE EXISTS (
SELECT FROM jsonb_array_elements(R.dat-> 'numbers') subarray
WHERE (subarray->>0)::decimal = 1 and (subarray->>1)::decimal = 1
);
另外,我看到 gin index 不处理这个操作符,所以基本上任何索引都可以帮助到这里吗?
【问题讨论】:
标签: sql arrays json postgresql jsonb