通过整数数组的索引查询表

时间:2013-01-05 12:21:42

标签: sql arrays postgresql

从VB.NET转换数据“to_timestamp”和“to_number”后我得到了很好的结果我想知道PostgreSQL是否有可能通过.NET中的整数数组查询表索引?

说,我的数组中填充了(1, 3, 5, 6, 9)。 在这里PostgreSQL是否有可能将包含这些索引数据的行返回到“odbc.reader”? 这比我现在循环和查询5次要快得多。

这样的事情:

SELECT myindexes, myname, myadress from mytable WHERE myindexes IS IN ARRAY 

如果这可能是一个简单的查询应该是什么样的?

1 个答案:

答案 0 :(得分:2)

这是可能的。

ANY

SELECT myindex, myname, myadress
FROM   mytable
WHERE  myindex = ANY ($my_array)

整数数组示例:

...
WHERE  myindex = ANY ('{1,3,5,6,9}'::int[])

Details about ANY in the manual.

IN

出于同样的目的,还有SQL IN() expression PostgreSQl在其当前实现中在执行之前在内部将其转换为= ANY (array),因此可以想象它有点慢。


加入 long 列表的示例(根据评论):

加入VALUES表达式

WITH x(myindex) AS (
    VALUES
    (1),(3),(5),(6),(9)
    )
SELECT myindex, myname, myadress
FROM   mytable
JOIN   x USING (myindex)

我在示例中使用CTE(这是可选的,也可以是子查询)。你需要PostgreSQL 8.4之后的版本。
The manual about VALUES.

加入unnested数组

或者你可以unnest()一个数组,JOIN就可以了:

SELECT myindex, myname, myadress
FROM   mytable
JOIN  (SELECT unnest('{1,3,5,6,9}'::int[]) AS myindex) x USING (myindex)

对于每个值运行单独的查询,这些方法中的每一种方法在性能方面都远优于