在我从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 如果这是可能的,那么一个简单的查询应该是什么样子?
发布于 2013-01-05 22:06:36
这是可能的。
任何
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.
在……里面
还有用于相同目的的SQL IN() expression。
在其当前的实现中,PostgreSQl在执行之前在内部将其转换为= ANY (array),因此可以想象它会稍微慢一点。
加入长列表的示例(根据注释):
联接到值表达式
WITH x(myindex) AS (
VALUES
(1),(3),(5),(6),(9)
)
SELECT myindex, myname, myadress
FROM mytable
JOIN x USING (myindex)我在示例中使用了一个CTE (这是可选的,也可以是一个子查询)。为此,您需要PostgreSQL 8.4或更高版本。
联接到非嵌套数组
或者,您可以对一个数组执行unnest()操作并对其执行JOIN:
SELECT myindex, myname, myadress
FROM mytable
JOIN (SELECT unnest('{1,3,5,6,9}'::int[]) AS myindex) x USING (myindex)这些方法中的每一种在性能上都远远优于针对每个值运行单独的查询。
https://stackoverflow.com/questions/14171720
复制相似问题