2009-08-20 3 views
0

У меня есть две таблицы:ускорить UPDATE с SELECT, запрос

  • Таблица 1 имеет эпизод и код, с Эпизода, в отличие.
  • Таблица 2 содержит эпизод и код, но эпизод не отличается (другие поля в таблице, не относящиеся к задаче, делают каждую строку уникальной).

Я хочу скопировать код Таблицы 1 в таблицу 2 для каждого эпизода. Текущий код для этого выглядит следующим образом:

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

Это часы и часы. (Я точно не знаю, сколько часов, потому что я отменил его примерно за 20-часовую отметку.) Они большие столы, но, конечно, есть более быстрый способ?

ответ

5

У меня нет SQL Server под рукой, и я не совсем уверен, но, похоже, я помню, что был синтаксис вроде следующего, который, вероятно, должен ускорить процесс.

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

Объединение может принадлежать в пункте обновления, но я никогда не пробовал сам: http://stackoverflow.com/questions/871905/use-select-inside-a- update-query – David

+0

Я знаю, что попробовал, но сейчас уже слишком поздно, и я сон :-). Я думаю, что синтаксис корректен с использованием подразумеваемого соединения, а ваша ссылка использует явное соединение. –

+0

Ничего себе. Это превратило его в 6-минутный запрос вместо 20-часового. : O. ... Теперь, чтобы проверить, что наборы результатов одинаковы ... – Margaret

1

Есть ли индексы в столбцах «Код» и «Эпизод» на обеих таблицах? Это определенно поможет ускорить работу совсем немного!

Marc

1

Вы можете использовать UPDATE с соединениями, как это. Обратите внимание, что вы должны указать 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

Смежные вопросы