Bonjour,
J'aimerais copier des lignes d'une table A à une table B.
Mais uniquement si la donnée n'existe pas déjà dans B.
Merci pour votre aide
Bonjour,
J'aimerais copier des lignes d'une table A à une table B.
Mais uniquement si la donnée n'existe pas déjà dans B.
Merci pour votre aide
salut ca doit etre quelque chose comme
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part INSERT INTO [table B]([Champ1],[Champ2],[Champ3]) SELECT [champ1],[champ2],[champ3] FROM [table A] where [table A].[champ1] not exist in(select [table B].[champ1] from [table B]
A verifier mais je ne dois pas etre loin
C'est NOT IN ou NOT EXISTS mais pas NOT EXISTS IN.
En supposant que Col1 soit la clef primaire :
NOT EXISTS
NOT IN
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 INSERT INTO TABLE_B (Col1, Col2, Col3) SELECT Col1, Col2, Col3 FROM TABLE_A WHERE NOT EXISTS (SELECT NULL FROM TABLE_B WHERE TABLE_B.Col1 = TABLE_A.Col1)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 INSERT INTO TABLE_B (Col1, Col2, Col3) SELECT Col1, Col2, Col3 FROM TABLE_A WHERE TABLE_A.Col1 NOT IN (SELECT TABLE_B.Col1 FROM TABLE_B)
Je ne sais pas si ça peut aider, mais je crois avoir remarqué que le NOT EXISTS était plus performant que le NOT IN...
C'est super, tout fonctionne parfaitement.
Merci beaucoup pour m'avoir fait gagner du temps..![]()
Merci de ne pas oublier le bouton résolu à l'avenir.
Elsuket, si j'ai bien compris votre lien celà voudrait dire qu'avec MS SQL Server, NOT IN / NOT EXISTS n'utilisent pas les stats pour construire le plan d'exécution ?
J'ai fait un test rapide (donc forcément incomplet), les trois syntaxes (NOT IN / NOT EXISTS / EXCEPT) me donnent le même plan d'exécution réel (avec une PK sur une colonne).
Partager