首页 > 解决方案 > PostgreSQL 使用位置数组访问数组中的多个元素

问题描述

我想知道在 PostgreSQL 中是否可以通过使用另一个指示一系列元素位置的数组来从数组的多个元素中输出一个数组。

准确地说:

array1 = [1,2,1]        
array_positions(array1,'1') = {1,3}
array2 = ['hello', 'bye', 'hello']

期望的结果:

array2[array_positions(array1,'1')] = {'hello', 'hello'}

我收到ERROR: array subscript must have type integer 任何建议?

标签: arrayspostgresql

解决方案


这可能会或可能不会太复杂而无法使用,但它确实证明了它是可能的:

SELECT vals.*
FROM (
  VALUES(array['hello', 'bye', 'hello'])
) AS t (arr)
JOIN lateral unnest(t.arr) WITH ORDINALITY AS vals(element, idx) ON TRUE
WHERE vals.idx = ANY(array_positions(array[1,2,1], 1));

推荐阅读