sql - 如何选择至少一个 json 元素与某些条件匹配的 postgres 行?
问题描述
这是我正在使用的:
创建表测试(id INT,数据 JSON); 插入测试值 (1, '[{"key": 2}, {"key": 1}]'), (2, '[{"key": 3}]'), (3, '[{"key": 1}]'); 从测试中选择 *; 从测试中选择 id 1 == ANY( json_array_elements(data) ->> 'key');
我要做的是选择列中任何 json 对象data
的键值key
为1
. 我试图提取行1
和3
. 请注意,我不确定子句==
之前的相等比较是否正确。ANY
当我运行上述内容时,我收到以下错误:ERROR: set-returning functions are not allowed in WHERE
解决方案
如果您可以自由使用jsonb
而不是json
(在大多数情况下更可取),请使用jsonb
“包含”运算符@>
:
SELECT *
FROM test
WHERE data @> '[{"key": 1"}]';
可以使用具有默认运算符类或更专业的 GIN 索引来支持jsonb_path_ops
:
CREATE INDEX test_data_gin_idx ON test USING gin (data jsonb_path_ops);
db<>在这里摆弄
有关的:
推荐阅读
- javascript - Javascript:如果每个页面和 cookie 的条件是唯一的
- layout - SwiftUI - 最新 Xcode 更新后布局变得疯狂
- javascript - 如何设置兄弟组件的状态以与上下文做出反应?
- geospatial - 与vividsolutions jts'within'方法有关的问题
- swift - 当应用程序处于后台时,Healthkit 查询不起作用
- php - Laravel 提高查询构建器性能或雄辩
- python - 返回元素字典而不是python中参数中的一个元素
- javascript - \n 的 Node.JS 正则表达式,但不是换行符,字符串
- wordpress - 重力形式预选选项复选框字段
- sapui5 - 如何在对话框中获取选定值作为文本