从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
如果这可能是一个简单的查询应该是什么样的?
答案 0 :(得分:2)
这是可能的。
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)
,因此可以想象它有点慢。
加入 long 列表的示例(根据评论):
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
就可以了:
SELECT myindex, myname, myadress
FROM mytable
JOIN (SELECT unnest('{1,3,5,6,9}'::int[]) AS myindex) x USING (myindex)
对于每个值运行单独的查询,这些方法中的每一种方法在性能方面都远优于。