当前位置: 代码迷 >> Oracle管理 >> 解决方案
  详细解决方案

解决方案

热度:59   发布时间:2016-04-24 06:16:36.0
求一个解决方案。
我有两个表,A和B;
A和B中有一个 hello 的字段,该字段在B表中是唯一的,在A表中不是;
A表中有50万条记录,B表中有1000万条记录;


现在我有个需求,我要从A表中拿出10W条记录,放到B表中去,请问如何处理?

注意的是,A表的 hello 字段可以重复,而在B表是唯一的;



之前考虑过,用唯一约束的异常来解决问题,但是效果不是很好。。

------解决方案--------------------
merge into 没有办法控制 10W条这个限制。

SQL code
--1、建一个和A表一模一样的临时表,并在hello上建索引create table tmp_A as select * from A where 1=2;create index tmp_a_idx1 on tmp_a(hello);--2、建立一个临时表tmp_b B表hello字段替冲,并加索引create table tmp_B as select distinct hello from B;create index tmp_b_idx1 on tmp_b(hello);--3、从A表中随即查出10W条 hello字段不重复的数据插入临时表 tmp_AINSERT INTO TMP_A  SELECT 列出A表字段    FROM (SELECT A.*,                 ROW_NUMBER() OVER(PARTITION BY A.HELLO ORDER BY DBMS_RANDOM.VALUE) ROW_            FROM A           WHERE NOT EXISTS           (SELECT 1 FROM TMP_B WHERE A.HELLO = TMP_B.HELLO))   WHERE ROW_ = 1     AND ROWNUM <= 100000;--4、将临时表Tmp_a中数据插入B表insert into B select * from Tmp_a;
  相关解决方案