如何在postgresql中通过数组进行选择?

时间:2014-05-01 05:37:20

标签: sql postgresql

说我有这样一张桌子:

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']数组。我认为这应该很容易,但我无法弄明白。

提前致谢。

3 个答案:

答案 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)

如果要将数组作为输出返回,请尝试:

SELECT array_agg(name)FROM tmp WHERE id = ANY(ARRAY [3,1,2]);

SQL FIDDLE