首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按整数数组索引查询表

问按整数数组索引查询表
EN

Stack Overflow用户
提问于 2013-01-05 20:21:42
回答 1查看 1.6K关注 0票数 1

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

比方说,我有一个填充了(1, 3, 5, 6, 9)的数组。PostgreSQL是否有可能将包含这些索引中的数据的行返回给"odbc.reader"?

这将比我现在所做的循环和查询快5倍。

如下所示:

代码语言:javascript
复制
SELECT myindexes, myname, myadress from mytable WHERE myindexes IS IN ARRAY 

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-05 22:06:36

这是可能的。

任何

代码语言:javascript
复制
SELECT myindex, myname, myadress
FROM   mytable
WHERE  myindex = ANY ($my_array)

使用整数数组的示例:

代码语言:javascript
复制
...
WHERE  myindex = ANY ('{1,3,5,6,9}'::int[])

Details about ANY in the manual.

在……里面

还有用于相同目的的SQL IN() expression。

在其当前的实现中,PostgreSQl在执行之前在内部将其转换为= ANY (array),因此可以想象它会稍微慢一点。

加入长列表的示例(根据注释):

联接到值表达式

代码语言:javascript
复制
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.

联接到非嵌套数组

或者,您可以对一个数组执行unnest()操作并对其执行JOIN:

代码语言:javascript
复制
SELECT myindex, myname, myadress
FROM   mytable
JOIN  (SELECT unnest('{1,3,5,6,9}'::int[]) AS myindex) x USING (myindex)

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14171720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档