При обновлении таблицы из другой или при выполнении запроса, который включает в себя сравнение двух таблиц, я обычно имеют привычку запрашивая как нижеВ чем разница между этими двумя запросами?
UPDATE dbo.Table1 SET COL =
(
SELECT i.colid FROM
dbo.Table2 i
WHERE i.did = dbo.Table1.did and
i.[pdate] = dbo.Table1.pdate and
i.pamount = dbo.Table1.pay and
i.[Ref No ] = dbo.Table1.refno and
i.[cNo ] = dbo.Table1.receipt
)
И в последнее время выше меня не подводил. Он возвращает ошибку, говорящую, что запрос возвращает более 1 запись/строку. Однако Мой начальник спросил, как показано ниже, и он работает. Я все еще не могу понять, почему моя неудача и его успех. И почему это никогда не подводило меня раньше?
UPDATE dbo.Table1 SET COL = i.colid
from
dbo.Table2 i
WHERE i.did = dbo.Table1.did and
i.[pdate] = dbo.Table1.pdate and
i.pamount = dbo.Table1.pay and
i.[Ref No ] = dbo.Table1.refno and
i.[cNo ] = dbo.Table1.receipt
Ваш исходный запрос не будет терпеть неудачу, если в 'Таблица2' для этих критериев' where' не было дубликатов данных. Однако, как только «Таблица2» соответствует нескольким строкам, вы получите свою ошибку. Вы можете сделать свой исходный запрос, используя «SELECT TOP 1» в подзапросе. Я думаю, что 'JOIN', однако, предпочтительнее« коррелированного подзапроса ». – sgeddes
Спасибо, сэр. Меня смущает то, что он также, вероятно, возвращает дубликат. Так почему он прошел? –