PostgreSQL如何查询数组内未知位置的指定标签对应值
未知下标时查询二维标签数组对应值的实现方案
核心实现逻辑是先将二维数组中的每一组[name, value]标签对拆分为独立行,匹配目标标签名后提取对应值,不同数据库的实现语法略有差异,以下是常用场景的写法:
方法1:展开数组匹配(适用于大多数支持数组类型的数据库)
以PostgreSQL为例,使用UNNEST函数展开数组:
SELECT tag_pair[2] AS tag_value FROM table1, UNNEST("Tag_List") AS tag_pair WHERE tag_pair[1] = 'mytagname';
如果使用ClickHouse,将UNNEST替换为arrayJoin即可,逻辑完全一致:
SELECT tag_pair[2] AS tag_value FROM table1 ARRAY JOIN "Tag_List" AS tag_pair WHERE tag_pair[1] = 'mytagname'
方法2:子查询遍历下标(适用于需要保留原表所有行的场景)
如果需要原表每一行都返回结果,无匹配标签时返回NULL,可以用生成下标的方式遍历查找:
SELECT ( SELECT "Tag_List"[idx][2] FROM generate_subscripts("Tag_List", 1) AS idx WHERE "Tag_List"[idx][1] = 'mytagname' LIMIT 1 ) AS tag_value FROM table1;
补充说明
- 同一个
Tag_List中存在多个同名标签时,上述写法默认返回第一个匹配到的标签值,去掉第二种写法的LIMIT 1即可返回所有匹配值 - 可以在WHERE子句中追加其他过滤条件,实现对指定行的标签查询
内容的提问来源于stack exchange,提问作者Denis.A
相关产品推荐
相关产品推荐

