Массовое обновление записей с помощью SQL - PullRequest
20 голосов
/ 08 июля 2011

У меня есть две таблицы в среде SQL Server 2008 со следующей структурой

Table1
- ID
- DescriptionID
- Description

Table2
- ID
- Description

Table1.DescriptionID сопоставляется с Table2.ID. Однако мне это больше не нужно. Я хотел бы сделать массовое обновление, чтобы установить для свойства Description таблицы Table значение, связанное с ним в Table2. Другими словами, я хочу сделать что-то вроде этого:

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)

Однако я не уверен, что это правильный подход. Может кто-нибудь показать мне, как это сделать?

Ответы [ 5 ]

38 голосов
/ 08 июля 2011

Сделай это:

update      Table1
set         Description = t2.Description
from        Table1 t1
inner join  Table2 t2
on          t1.DescriptionID = t2.ID
25 голосов
/ 08 июля 2011

Ваш подход в порядке

Может быть, немного яснее (для меня в любом случае!)

UPDATE
  T1
SET
  [Description] = t2.[Description]
FROM
   Table1 T1
   JOIN
   [Table2] t2 ON t2.[ID] = t1.DescriptionID

И этот, и ваш запрос должны выполняться с одинаковой производительностью, поскольку это один и тот же запрос,выложены по-разному.

3 голосов
/ 08 июля 2011

Вы можете сделать это через обычный UPDATE с JOIN

UPDATE T1
SET Description = T2.Description
   FROM Table1 T1
      JOIN Table2 T2
         ON T2.ID = T1.DescriptionId
2 голосов
/ 12 марта 2015

Или вы можете просто обновить без использования соединения, как это:

Update t1 set  t1.Description = t2.Description from @tbl2 t2,tbl1 t1
where t1.ID= t2.ID
0 голосов
/ 08 июля 2011

Ваш SQL, который вы разместили в своем вопросе, является одним из способов сделать это. У большинства вещей в SQL есть несколько способов сделать это.

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)

Если вы планируете запустить его на базе данных PROD, лучше сначала создать его снимок или зеркало и проверить его. убедитесь, что данные заканчиваются, как вы ожидаете для пары записей. И если вы удовлетворены, запустите его на реальной БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...