Comment ignorer les mêmes données en double lors de la copie d'un tableau

oracle sqlbulkcopy sql-insert subquery

Question

J'ai une table1 (la clé est X, XX) ressemble à ci-dessous:

x,y,xx,yy,xxx,yyy

J'ai créé une nouvelle table2 (key is code) comme ci-dessous:

code,name,xx,yy,xxx,yyy

Maintenant, je veux copier toutes les données de table1 dans table2, et si le même code rencontré le saute,

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

J'ai utilisé le code ci-dessous pour copier toutes les données. J'ai l'erreur 00001. 00000 - "unique constraint (%s.%s) violated" car x est dupliqué dans la table1, mais je ne sais pas comment ignorer les données X dupliquées. tu m'aides?

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

J'ai essayé cela, je pense que ce n'est pas correct.

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

Réponse acceptée

essaye ça:

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)

OU

utilisez indice /*+ ignore_row_on_dupkey_index(table2, table2_index) */


Réponse populaire

Vous pouvez essayer avec le curseur:

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;

Quelques insertions échoueront à cause de la duplication, mais reste devrait être inséré.

Ou une autre option sans curseur est:

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;
/


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi