Sql 使用拾取列表查询Oracle

Sql 使用拾取列表查询Oracle,sql,oracle,ms-access,odbc,Sql,Oracle,Ms Access,Odbc,我有一个oracle数据库,我具有只读访问权限(没有创建临时表的权限)。我有一个28000个ID的选择列表(在Excel中),对应于一个有数百万条记录的表中的28000行。如何编写查询以返回28000行 我曾尝试在access中创建一个表,并通过ODBC执行联接,但access冻结/花费了令人难以置信的长时间。我是否必须在in语句中创建一个包含28000项的查询 PL/SQL中有什么东西可以让它更简单吗 谢谢你的时间和帮助 -JC在Oracle 10g中,IN(…,…,,)类型查询的最大变量数为

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

我曾尝试在access中创建一个表,并通过ODBC执行联接,但access冻结/花费了令人难以置信的长时间。我是否必须在in语句中创建一个包含28000项的查询

PL/SQL中有什么东西可以让它更简单吗

谢谢你的时间和帮助


-JC

在Oracle 10g中,IN(…,…,,)类型查询的最大变量数为1000。

是什么让您的28000行变得特别


记录中是否有其他字段可用于限制WHERE子句中的查询(或至少缩小数百万行的范围)?可能您感兴趣的ID在某个范围内?

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

这是一种痛苦的情况。一种解决方法是创建一个包含所有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
这基本上在with子句中嵌入了所有28000个ID,允许您进行连接,而无需实际创建表


难看,但它应该可以工作。

这里介绍了最好的方法:

ID实际上是电话号码和时间的组合。这正是这一行的独特之处。我相信Graham在问,您的28000行与表中数百万行中您不感兴趣的行有什么区别。你能设计一个查询,在1000个字的列表中找到28000行不涉及28个独立的行吗?+1,一针见血。如果你想不出答案,你将面临其他人给出的痛苦解决方案之一。它们确实在某个日期范围内,但成千上万的其他记录也是如此。我仍然有点困惑,除了可能使查询速度加快一点之外,这将如何帮助我。我不是还要写多个IN-list吗?当你没有对数据库的写访问权限时很难做到。为什么?数据库中没有写入任何内容!不幸的是,我没有创建临时表的权限:(@JC,上面链接的示例不需要任何临时表。使用“…from table(…”构造!!速度非常快!