将所有记录放入两个临时表中

时间:2015-07-13 06:40:48

标签: oracle

我有一张表TABLE1,并且有超过10L的记录。

作为要求的一部分,我需要根据以下查询获取一些记录到临时表TEMP_TABLE1

CREATE TABLE TEMP_TABLE1 AS (SELECT * FROM TABLE1 tb1 WHERE tb1.repo_id IN (condition A));

而且,我必须根据相反的查询将其余记录输入TEMP_TABLE2

CREATE TABLE TEMP_TABLE2 AS (SELECT * FROM TABLE1 tb1 WHERE tb1.repo_id NOT IN (condition A));  --added NOT IN

我的问题是,在第一次执行查询之后,我们是否可以移动表中的其余记录而不需要新的查询,这也需要相同的时间来处理。我在两种情况下使用相同的条件进行过滤。

1 个答案:

答案 0 :(得分:0)

INSERT ALL 
  WHEN repo_id IN (condition A) THEN INTO temp_table1
  WHEN repo_id not IN (condition A) THEN INTO temp_table2
SELECT * FROM table1;

首先,您需要创建空的temp_tables:

create table temp_table1 as (select * from table1 where 1=0);
create table temp_table2 as (select * from table1 where 1=0);

如果两个集合都被排除,您可以简单地使用WHEN repo_id not IN (condition A) THEN而不是第二个条件ELSEconditional inserts的示例(请参阅页面底部)。