web-dev-qa-db-fra.com

Insérer une ligne dans le tableau pour chaque identifiant dans un autre tableau

J'ai essayé de chercher ici une solution similaire, mais je n'en ai pas vu, alors je me demandais quelle était la meilleure façon d'accomplir ce qui suit.

J'ai une table avec 17 millions de lignes + ont toutes un ID unique. Nous avons récemment créé une nouvelle table qui sera utilisée conjointement avec la table précédente où la clé étrangère de la nouvelle table est l'identifiant unique de l'ancienne table.

Par exemple.
Tableau 1 - id, champ1, champ2, champ3 ... tableau 2 - table1.id, champ1 ...

Le problème est que puisque nous migrons cela dans un environnement en direct, nous devons sauvegarder le tableau 2 avec une ligne contenant l'identifiant du tableau 1 pour chaque ligne du tableau 1. ex, tableau 1 - 1, test, null le tableau 2 a maintenant besoin avoir: 1, null, ... et ainsi de suite pour chaque ligne du tableau1. Le principal problème est que les identifiants ne sont pas tous séquentiels dans le tableau 1, nous devrons donc lire dans le tableau 1, puis insérer en fonction de l'identifiant de trouvé dans le tableau 2.

Y a-t-il un moyen plus simple de procéder? Merci d'avance Joe

Également pour clarifier, le tableau 2 sera de nouvelles données et la seule chose qu'il contiendra du tableau 1 est l'identifiant pour conserver la relation de clé étrangère

C'est aussi SQL Server 2000

42
obj63

Vous devez lire cet article.

Quels sont les anti-patterns SQL les plus courants?

Le problème principal est que les identifiants ne sont pas tous séquentiels dans le tableau 1, nous devrons donc lire dans le tableau 1, puis insérer en fonction de l'identifiant de trouvé dans le tableau 2

Oui, regardez ma réponse dans l'article ci-dessus et écrivez une boucle de navigation à l'aide de l'élément n ° 2.

Assurez-vous que lorsque vous écrivez l'instruction d'insertion, vous fournissez une liste de champs - comme je le dis dans l'article n ° 1.

3
Amy B

Si je comprends bien, vous voulez un enregistrement dans table2 pour chaque enregistrement dans table1. Je pense également qu'en dehors de la référence à table1, table2 devrait initialement contenir des lignes vides.

En supposant donc

table1 (ID, field1, field2, ...)
table2 (ID, table1_ID, fieldA, fieldB,...)
-- where table1_ID is a reference to ID of table1

Après avoir créé table2, vous pouvez simplement exécuter cette instruction d'insertion

insert into table2(table1_ID) 
select ID from table1
49
kristof

Je ne suis pas sûr de vous suivre exactement, mais est-ce que quelque chose comme ça fonctionnerait pour vous?

INSERT INTO table2 ( SELECT field1, field2, field3... FROM table1 )

Si je comprends bien, vous voulez un enregistrement dans table2 pour chaque enregistrement dans table1. Cela fera exactement cela. Faites simplement correspondre vos champs dans la sélection dans le bon ordre et spécifiez des constantes pour tous les champs de la table2 que vous n'avez pas dans la table1.

HTH. Faites-moi savoir si je ne comprends pas et que j'essaierai de nouveau d'aider.

13
Ryan Guill