У меня есть временная таблица с несколькими отдельными записями клиентов, и я хочу обновить один и тот же столбец во всех строках для одного и того же адреса электронной почты, если они имеют существующее значение:SQL Server - JOIN в инструкции UPDATE
CustomerID | Email | Pref1 | Pref2 | Pref3
-----------------------------------------------------
1234 [email protected] 1 0 0
1235 [email protected] 1 1 0
1236 [email protected] 0 0 1
1237 [email protected] 0 0 0
1238 [email protected] 1 0 0
должны стать:
CustomerID | Email | Pref1 | Pref2 | Pref3
-----------------------------------------------------
1234 [email protected] 1 1 1
1235 [email protected] 1 1 1
1236 [email protected] 1 1 1
1237 [email protected] 1 0 0
1238 [email protected] 1 0 0
в настоящее время у меня есть время цикла (цикл по строкам, которые еще должны быть обновлены), который содержит внутренний курсор цикл по столбцам, которые я хочу, чтобы обновить (Pref1 , Pref2, Pref3 и т. Д.). Это работает, но берет навсегда на большом наборе записей.
Как я могу изменить ниже:
UPDATE #table
SET Pref1 =
(
SELECT MAX(IsNull(Pref1,0))
FROM #table
WHERE Email = '[email protected]'
)
WHERE Email = '[email protected]'
так, что вместо прохождения в каждый адрес электронной почты, так или иначе относятся к электронному адресу записи он обновляет?
UPDATE #table
SET Pref1 =
(
SELECT MAX(IsNull(Pref1,0))
FROM #table
WHERE Email = #table.email
)
(Этот запрос не работает, он просто обновляет весь этот столбец для всех записей в 1, если она существует в этом столбце). Должен ли я использовать какое-то обновление соединения?
Отлично, именно то, что я искал. Благодаря! – TheTor