我希望能够使用进行查询ANY
它维护传递给 any 函数的数组的顺序。考虑这个简单的例子:
create table stuff (
id serial,
value int
);
insert into stuff (value) values (1), (2), (3), (4), (5);
select * from stuff where value = ANY(ARRAY[1,2,3,4,5]);
select * from stuff where value = ANY(ARRAY[5,4,3,2,1]);
即使数组的顺序不同,这也会导致两个查询的顺序相同。
----+-------
1 | 1
2 | 2
3 | 3
4 | 4
5 | 5
(5 rows)
id | value
----+-------
1 | 1
2 | 2
3 | 3
4 | 4
5 | 5
(5 rows)
如果可能的话,我希望有一种简写方法来按数组内部的顺序保存结果ANY
。这可能吗?
到目前为止,我不得不写这样的东西,感觉有点粗暴:
CREATE FUNCTION ordered_any (
ints int[]
) RETURNS int[] as $$
DECLARE
results int[];
i int;
value int;
BEGIN
FOR i IN 1 .. cardinality(ints) LOOP
SELECT f.id FROM stuff f
WHERE f.value = ints[i]
INTO value;
results = array_append(results, value);
END LOOP;
RETURN results;
END;
$$
LANGUAGE 'plpgsql';
select ordered_any(ARRAY[5,4,3,2,1]);
感谢“任何”帮助!没有双关语的意思;)