说我有这样一张桌子:
DROP TABLE tmp;
CREATE TABLE tmp (id SERIAL, name TEXT);
INSERT INTO tmp VALUES (1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five');
SELECT id, name FROM tmp;
就是这样:
id | name
----+-------
1 | one
2 | two
3 | three
4 | four
5 | five
(5 rows)
然后我有一个ARRAY[3,1,2]
的数组。我想通过这个数组查询表,所以我可以获得一个ARRAY['three', 'one', 'two']
数组。我认为这应该很容易,但我无法弄明白。
提前致谢。
答案 0 :(得分:1)
要保留数组顺序,需要使用索引顺序(使用row_number()
)取消它,然后加入tmp
表:
SELECT array_agg(name ORDER BY f.ord)
FROM (
select row_number() over() as ord, a
FROM unnest(ARRAY[3, 1, 2]) AS a
) AS f
JOIN tmp ON tmp.id = f.a;
array_agg
-----------------
{three,one,two}
(1 row)
答案 1 :(得分:0)
使用unnest
功能:
SELECT id, name FROM tmp
WHERE id IN (SELECT unnest(your_array));
Eelke建议采用不同的技术:
您也可以使用any
运算符
SELECT id, name FROM tmp WHERE id = ANY ARRAY[3, 1, 2];
答案 2 :(得分:0)