复制时如何跳过相同的重复键数据table

How to skip same duplicate key data when copy table

我有一个表 1(键是 X,XX)如下所示:

x,y,xx,yy,xxx,yyy

我创建了一个新的表2(关键是代码)如下:

code,name,xx,yy,xxx,yyy

现在我想将table1中的所有数据复制到table2中,如果遇到相同的代码跳过它,

x -> code
Y -> name
xx-> xx
yy -> yy
xxx -> xxx
yyy -> yyy

我用下面的代码复制了所有数据,我得到了错误00001. 00000 - "unique constraint (%s.%s) violated",因为table1中有重复的x,但我不知道如何跳过重复的X数据,你能帮我吗?

INSERT INTO table2 (code, name, xx, yy, xxx, yyy) 
SELECT x, y, xx, yy, xxx, yyy FROM table1

我试过了,我觉得不对。

INSERT INTO table2 (code, name, xx, yy, xxx, yyy) 
SELECT DISTINCT x, y, xx, yy, xxx, yyy FROM table1

试试这个:

INSERT INTO table2 (code, name, xx, yy, xxx, yyy) 
SELECT DISTINCT x, y, xx, yy, xxx, yyy FROM table1
where x not in (select code from table2)

使用提示/*+ ignore_row_on_dupkey_index(table2, table2_index) */

你可以试试光标:

DECLARE
Cursor c1 is select code, name, xx, yy, xxx, yyy from table1;

for insertValue in c1
loop

insert into table2(code, name, xx, yy, xxx, yyy) values (insertValue.code, insertValue.name,insertValue.xx ... );

end loop;

很少有插入会因为重复而失败,但应该插入其余部分。

或者没有光标的其他选项是:

BEGIN
 FOR insertValue IN (
 select code, name, xx, yy, xxx, yyy from table1 )
LOOP
insert into table2(code, name, xx, yy, xxx, yyy) values (insertValue.code, 
insertValue.name,insertValue.xx ... );  
END LOOP;
END;
/