ОБНОВЛЕНИЕ таблицы через объединение в SQL
Я пытаюсь нормализовать свои таблицы, чтобы сделать БД более эффективной.
Для этого я удалил несколько столбцов из таблицы, для которой обновлял несколько столбцов.
Вот оригинальный запрос, когда все столбцы были в таблице:
UPDATE myActDataBaselDataTable
set [Correct Arrears 2]=(case when [Maturity Date]='' then 0 else datediff(d,convert(datetime,@DataDate, 102),convert(datetime,[Maturity Date],102)) end)
from myActDataBaselDataTable
Теперь я удалил [Maturity Date]
из таблицы myActDataBaselDataTable, и необходимо извлечь этот столбец из базовой справочной таблицы ACTData
где это называется Mat
,
В моей таблице myActDataBaselDataTable поле Номер счета представляет собой объединение 3 полей в ACTData, таким образом,
myActDataBaselDataTable.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]
(где ac - псевдоним для ACTData)
Итак, взглянув на ответы, приведенные в других разделах SO (например, /questions/24959751/obnovit-tablitsu-s-pomoschyu-join-v-sql-server), я попытался изменить этот конкретный оператор обновления, как показано ниже, но я не могу сделать это правильно:
UPDATE myActDataBaselDataTable
set dt.[Correct Arrears 2]=(
case when ac.[Mat]=''
then 0
else datediff(d,convert(datetime,'2014-04-30', 102),convert(datetime,ac.[Mat],102))
end)
from ACTData ac
inner join myActDataBaselDataTable dt
ON dt.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]
Я либо получаю Incorrect syntax near 'From'
ошибка, или The multi-part identifier "dt.Correct Arrears 2" could not be bound.
Я был бы признателен за любые рекомендации о том, как сделать это правильно, или suugestiopns о том, как сделать это лучше.
Спасибо
РЕДАКТИРОВАТЬ:
Кстати, когда я запускаю ниже, как SELECT, он возвращает данные без ошибок:
select case when [ac].[Mat]=''
then 0
else datediff(d,convert(datetime,'2014-04-30', 102),convert(datetime,[ac].[Mat],102))
end
from ACTData ac
inner join myActDataBaselDataTable dt
ON dt.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]
1 ответ
В обновлении объединения обновите псевдоним
update dt
Что сбивает с толку то, что в более поздних версиях SQL вам не нужно использовать псевдоним в строке обновления