小编典典

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

sql

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

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


阅读 190

收藏
2021-04-14

共1个答案

小编典典

有可能

任何

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)

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

2021-04-14