2009-08-20 6 views
0

J'ai deux tables:vitesse un UPDATE avec requête SELECT

  • Tableau 1 a Episode et le Code, avec un épisode distinct.
  • Le tableau 2 comporte un épisode et un code, mais l'épisode n'est pas distinct (les autres champs de la table, non pertinents à la tâche, rendent chaque ligne unique).

Je souhaite copier le code du tableau 1 dans le tableau 2 pour chaque épisode. Le code actuel pour ce faire est le suivant:

UPDATE Table2 
SET Table2.Code = (SELECT TOP 1 Code FROM Table1 WHERE Episode = Table2.Episode) 

Cela prend des heures et des heures. (Je ne sais pas exactement combien d'heures, parce que je l'ai annulé à environ la marque de 20 heures.) Ils sont grandes tables, mais sûrement il y a un moyen plus rapide?

Répondre

5

Je n'ai pas de SQL Server à portée de main et je ne suis pas complètement sûr, mais je crois me rappeler qu'il y avait une syntaxe comme celle-ci qui devrait probablement accélérer les choses.

UPDATE Table2 SET Table2.Code = Table1.Code FROM Table1 
WHERE Table1.Episode = Table2.Episode 
+0

La jointure peut appartenir à la clause de mise à jour, mais je ne l'ai jamais essayé moi-même: http://stackoverflow.com/questions/871905/use-select-inside-a- update-query – David

+0

Je sais que je l'ai essayé, mais maintenant il est trop tard et j'ai sommeil :-). Je pense que la syntaxe est correcte en utilisant une jointure implicite et votre lien utilise une jointure explicite. –

+0

Wow. Cela l'a transformé en une requête de 6 minutes au lieu de 20 heures. : O. ... Maintenant, pour vérifier les ensembles de résultats sont les mêmes ... – Margaret

1

Y a-t-il des indices sur les colonnes "Code" et "Episode" sur les deux tableaux? Ceux-ci aideraient certainement à accélérer les choses un peu!

Marc

1

Vous pouvez utiliser UPDATE avec des jointures comme celle-ci. Notez que vous devez spécifier FROM.

UPDATE MyTable 
SET MyColVal = O.NewVal 
FROM MyTable T 
INNER JOIN MyOtherTable O ON T.Id=O.Id 
WHERE ... 

http://doc.ddart.net/mssql/sql70/ua-uz_3.htm

Questions connexes