【问题标题】:SQL IN statement to extract for 100k records [duplicate]用于提取 10 万条记录的 SQL IN 语句 [重复]
【发布时间】:2013-12-23 19:50:26
【问题描述】:

我有一个文件 SRQ,它有 10000 个唯一的 SRQ_ID。 我有一个表(TABLE1),它有 2 列,即 SRQ_ID,WORK_ID 。 我需要编写一个查询,它将在表(TABLE1)中搜索文件 SRQ 中的所有 SRQ_ID,并显示带有相应 WORK_ID 的输出。

我尝试了以下代码。但 IN 子句仅适用于 1000 条记录。如果我有 100k 条记录,如何运行?

select WO_ID 
from TABLE1 
where SRQ_ID in ('B6512DF0','5838FABC','EC5D804C','074DD65C')

【问题讨论】:

  • 你使用的是什么 SQL 数据库?
  • @StingyJack 好像是 PostgreSQL
  • @deadlock - 1K 限制是 postgres 的东西吗?
  • @deadlock:我没有看到任何迹象表明这是针对 Postgres 的。从“适用于 1000 条记录”来看,我实际上认为它是 Oracle,因为 Oracle 在 IN 运算符中只允许 1000 个文字值
  • 没有 RDBMS 就不清楚你在问什么。对于 RDBMS,它是重复的。只需使用搜索引擎找出答案并删除此问题。这被重复了 100 次。

标签: sql oracle


【解决方案1】:

您是否有理由不能只使用 SRQ_ID 在表之间进行连接?

select wo_id from table1 join srq using srq_id

这将为您提供 srq 表中所有具有 srq_id 值的行的工作 ID。

【讨论】:

  • 我们应该检查 prod 环境,这就是为什么我不愿意接受这个选项...
【解决方案2】:

如果文件在数据库服务器上,那么您可以将其作为外部表访问,并将两者连接起来。否则,我建议将代码批量加载到全局临时表中并对其执行连接。

【讨论】:

    【解决方案3】:

    如果您不喜欢创建临时表,可以使用嵌套表:

    CREATE OR REPLACE TYPE VARCHAR_TABLE_TYPE AS TABLE OF VARCHAR2(20);
    
    select WO_ID 
    from TABLE1 
    where SRQ_ID MEMBER OF VARCHAR_TABLE_TYPE('B6512DF0','5838FABC','EC5D804C','074DD65C');
    

    但我不知道初始化嵌套表的限制。 Oracle 文档说:“由于嵌套表没有声明的大小,您可以在构造函数中根据需要放置尽可能多的元素。”

    【讨论】:

      猜你喜欢
      • 2014-11-16
      • 2013-03-30
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      相关资源
      最近更新 更多