2009-06-25 76 views
1

我有一个oracle数据库,它拥有只读访问权限(没有创建临时表的权限)。我有一个选择列表(在Excel中)28000个ID,对应28000行的表中有数百万条记录。如何编写查询以返回28000行?用选择列表查询Oracle

我尝试创建一个表访问和通过ODBC执行连接,但访问冻结/需要一个令人难以置信的长时间。我是否需要在IN语句中创建含28,000个项目的查询?

PL/SQL中有什么能让它更容易吗?

谢谢你的时间和帮助。

-jc

回答

0

用于IN(..,.. ,,)的最大数量的变量类型的查询是1000 Oracle 10g中。

+0

很高兴知道,谢谢! – 2009-06-25 21:34:00

3

什么让28,000行变得特别?

是否有记录中的另一个字段可用于限制您在WHERE子句中查询(或至少缩小数百万行的范围)?也许你感兴趣的ID落在一定范围内?

+0

这些ID实际上是电话号码和时间的组合。这几乎是这个行的独特之处。 – 2009-06-25 21:33:11

+2

我相信格雷厄姆在询问什么区别28,000行和表中您不感兴趣的数百万行。您能设计一个查询,查找那些不涉及28个单独的IN列表(1000个文本)的28,000行片? – 2009-06-25 21:50:21

0

尝试在Access中创建的表上创建索引。

0

这是一个痛苦的条件。一种解决方法是创建一个包含所有ID的视图,然后加入到它。

以下示例是Oracle。

WITH 
ids AS 
(
    SELECT 314 ID FROM DUAL UNION ALL 
    SELECT 159 ID FROM DUAL UNION ALL 
    SELECT 265 ID FROM DUAL 
) 
SELECT VALUE1, VALUE2 
FROM SOME_TABLE, ids 
WHERE SOME_TABLE.ID = ids.ID 

这基本上嵌入所有28000组的ID,在与条款,让你做的连接,而无需实际创建表。

丑,但它应该工作。