首页 > 解决方案 > 如何选择至少一个 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的键值key1. 我试图提取行13. 请注意,我不确定子句==之前的相等比较是否正确。ANY

当我运行上述内容时,我收到以下错误:ERROR: set-returning functions are not allowed in WHERE

标签: sqlpostgresqlpostgresql-json

解决方案


如果您可以自由使用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<>在这里摆弄

有关的:


推荐阅读