Query pour mise a jour entre 2 tables

Query pour mise a jour entre 2 tables - SQL/NoSQL - Programmation

Marsh Posté le 03-01-2005 à 18:35:26    

j'ai deux tables identique au niveau schema
 

Code :
  1. table1
  2. x
  3. y
  4. z
  5. primary key(x,y)


 

Code :
  1. table2
  2. idem


 
pour aller remplir la table1 avec les données de la table2 je fait

Code :
  1. insert into table1(x,y,z) select x,y,z from table2;


le probleme c que la table1 contient deja des records semblables a ceux table2 si on se préocuppe uniquement des primary keys et le sgbd me renvoie un "cannot insert , duplicates keys" et ninsere rien du tout.  :sweat:  
 
jaimerai qd mm inserer certains record dans la table pour cela il faudrait que je puisse filtrer mon select et ne prend que les record manquant
 
pour une table avec une primary key composee je n'y arrive pas :/


Message édité par red faction le 03-01-2005 à 18:36:57
Reply

Marsh Posté le 03-01-2005 à 18:35:26   

Reply

Marsh Posté le 03-01-2005 à 19:23:59    

insert into table1(x,y,z) select x,y,z from table2 where not in(select x,y,z from table 1);
 
un truc du genre :o

Reply

Marsh Posté le 03-01-2005 à 19:30:54    

ouais et sur 4 colonne ? tu fait 4 select avec jointure?

Reply

Marsh Posté le 03-01-2005 à 19:34:32    

ben c pareil
insert into table1(w,x,y,z) select * from table2 where table2.pk not in(select table1.pk from table1)

Reply

Marsh Posté le 03-01-2005 à 19:56:08    

Glod 2 a écrit :

ben c pareil
insert into table1(w,x,y,z) select * from table2 where table2.pk not in(select table1.pk from table1)


 
en utilisant directement le nom de la constraint primary key ??? (et non la colonne sur lequel porte la primary key) :heink:

Reply

Marsh Posté le 03-01-2005 à 20:08:44    

Mais non, deuxième option.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 03-01-2005 à 20:11:05    

dans lexemple que tu a mis, si la primary key porte sur 3 olonnes comment tu fait ? (x ,y,z ) par exemple ....

Reply

Marsh Posté le 03-01-2005 à 21:06:02    

insert into table1(w,x,y,z) select * from table2 where (x,y,z) not in(select x,y,z from table1)

Reply

Marsh Posté le 03-01-2005 à 23:21:41    

"You have written a subquery that can return more than one field without using the EXISTS reserved word in the main query's FROM clause. Revise the SELECT statement of the subquery to request only one field." :/

Reply

Marsh Posté le 03-01-2005 à 23:45:15    

Essaye ça alors :
 

Code :
  1. insert into table1(w,x,y,z)
  2.     select * from table2 where not exists
  3.         (select 1 from table1 where table1.key1 = table2.key1 and ...)

Reply

Marsh Posté le 03-01-2005 à 23:45:15   

Reply

Marsh Posté le 04-01-2005 à 08:19:56    

Tu es sur quel SGBD ? Si c oracle (il me semble a partir de 8i) tu peus utiliser une commande MERGE.  
Ou sinon (mojns propre) tu peus virer la primary key de la table2 , insérer tous les enregistrements de la table 1 dans la table 2. Aprés tu effaces les doublons de la table 2 .(delete from table2 where ... in (select x,y,count(*) from table2 group by x,y having count(*) > 1))

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed