В SQL добавление набора значений, соответствующих соединению - PullRequest
2 голосов
/ 24 мая 2011

Допустим, у меня есть Таблица_А , содержащая:

ID OldValue
3     16
1     5

и Таблица_Б содержит

ID Value OldValue
1    2     NULL
2    4     NULL 
3    8     NULL

, и которую я хочу вставитьOldValues ​​из Table_A в Table_B, где идентификаторы равны, что приводит к:

обновлен Table_B

ID Value OldValue
1    2     5
2    4     NULL 
3    8     16

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

Я на SQL Server 2008

Ответы [ 5 ]

2 голосов
/ 24 мая 2011
Update Table_B
Set OldValue = A.OldValue
From Table_A As A
    Join Table_B As B
        On B.ID = A.ID
1 голос
/ 24 мая 2011

Возможно, какое-то слияние?

Действительно.Ниже приведен стандартный SQL, который поддерживается в SQL Server 2008:

MERGE INTO Table_B
   USING Table_A
      ON Table_B.ID = Table_A.ID
WHEN MATCHED THEN
   UPDATE
      SET OldValue = Table_A.OldValue;
1 голос
/ 24 мая 2011

Использовать объединение:

UPDATE TABLE_B
SET OLDAVLUE=A.OLDVALUE
FROM TABLE_B B 
LEFT JOIN TABLE_A A ON B.ID=A.ID
1 голос
/ 24 мая 2011

Простой:

update x set OldValue = a.OldValue
from Table_B x
join Table_A a on x.ID = a.ID
1 голос
/ 24 мая 2011

Вы хотите "обновление от"

UPDATE B
SET B.OldValue = A.OldValue
FROM Table_B B
INNER JOIN Table_A  ON B.ID = A.ID

Обычно я пишу это как выбор, затем, как только я получаю результат, я преобразую его в обновление.

...