update tab1 set
from tab1, tab2
where

а) Какая связь во втором запросе между 2 упоминаниями tab1 ?

Ниже напишу

б) Невозможно назначить алиас обновляемой таблице и в where
приходится упоминать её имя целиком.

Это у MSSQL такая болячка не только здесь. У него в обычных UPDATE и DELETE алиася назначить нельзя :-/

в) что будет, если обновляемой строке соответвует более одной
строки из других таблиц ?

Признаться честно, я доки не читал по этой команде. Но использую я её по следующему алгоритму: я представляю что FROM разворачивается в цикл типа FOR SELECT. Потом MSSQL делает проход по этому циклу и смотрит а есть ли в выборке запись, соответствующая таблице в UPDATE и если есть, она присваивает эначениям полей этой записи то что надо. Как-то мне всё понятно было всегда. Я ней реально пользуюсь гораздо чаще чем обычным апдейтом...

Ответить