1

在从 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 

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

4

1 回答 1

2

这是可能的。

任何

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

整数数组示例:

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

手册中有关的详细信息ANY

还有用于相同目的的 SQLIN()表达式。
PostgreSQl 在其当前实现中= ANY (array)在执行之前将其转换为内部,因此可以想象它会慢一些。


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

JOIN 到 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。
关于VALUES.

加入未嵌套的数组

或者你可以unnest()一个数组和JOIN它:

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

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

于 2013-01-05T14:06:36.070 回答