在从VB.NET转换数据“ to_timestamp”和“ to_number”获得出色的结果之后,我想知道PostgreSQL是否有可能通过.NET的整数数组查询表索引?
说,我的数组充满(1, 3, 5, 6, 9)。PostgreSQL是否有可能将包含这些索引的数据的行返回到“ odbc.reader”? 这将比我现在循环和查询5次要快得多。
(1, 3, 5, 6, 9)
像这样的东西:
SELECT myindexes, myname, myadress from mytable WHERE myindexes IS IN ARRAY
如果可能的话,一个简单的查询应该是什么样子?
有可能
SELECT myindex, myname, myadress FROM mytable WHERE myindex = ANY ($my_array)
整数数组示例:
... WHERE myindex = ANY ('{1,3,5,6,9}'::int[])
有关详细信息,请ANY参见手册。
ANY
也有用于相同目的的SQLIN()表达式。 PostgreSQl在其当前实现中将其转换为= ANY (array)内部执行之前,因此可以想象它会慢一些。
IN()
= 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或更高版本。 关于的手册VALUES。
VALUES
或者,您可以unnest()使用数组并JOIN对其进行处理:
unnest()
JOIN
SELECT myindex, myname, myadress FROM mytable JOIN (SELECT unnest('{1,3,5,6,9}'::int[]) AS myindex) x USING (myindex)
这些方法中的每一种在性能上均 远胜 于针对每个值运行单独的查询。