Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 почему UPDATE работает правильно?  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
update tab1
set fld = b.fld
from tab1 a
join tab2 b on a.k=b.k
where a.z in (1,2)

почему обновление происходит только строк где z равно 1 или 2
я же указал условие не для tab1 которая в update, а для ее алиаса.
Чет я не пойму, объясните.
в постгресе писал так тут вроде все ясно
update tab1 as a
set fld = b.fld
from tab2 b 
where a.k=b.k and a.z in (1,2)
19 окт 11, 12:40    [11465313]     Ответить | Цитировать Сообщить модератору
 Re: почему UPDATE работает правильно?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Открываеи хелп и видим

FROM <table_source>
Specifies that a table, view, or derived table source is used to provide the criteria for the update operation. For more information, see FROM (Transact-SQL).

If the object being updated is the same as the object in the FROM clause and there is only one reference to the object in the FROM clause, an object alias may or may not be specified. If the object being updated appears more than one time in the FROM clause, one, and only one, reference to the object must not specify a table alias. All other references to the object in the FROM clause must include an object alias.
19 окт 11, 12:48    [11465376]     Ответить | Цитировать Сообщить модератору
 Re: почему UPDATE работает правильно?  [new]
iljy
Member

Откуда:
Сообщений: 8711
PG81,

а для каких строк оно должно происходить, если вы только их и отбираете? Если обновляемая таблица в секции FROM одна, то без разницы, указываете вы ее имя или псевдоним, но лучше таки псевдоним, понятнее. И кстати, второй вариант записи в скуле так же допустим.
19 окт 11, 12:49    [11465384]     Ответить | Цитировать Сообщить модератору
 Re: почему UPDATE работает правильно?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
это же та же tab1, все правильно
19 окт 11, 12:49    [11465389]     Ответить | Цитировать Сообщить модератору
 Re: почему UPDATE работает правильно?  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
Glory,

даже с переводом могу привести, но из этого ничего не следует
автор
FROM <источник_таблицы>
Определяет, что для определения критериев операции обновления используется таблица, представление или производный источник таблицы. Дополнительные сведения см. в разделе FROM (Transact-SQL).

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

Представление с триггером INSTEAD OF UPDATE не может быть целью инструкции UPDATE с предложением FROM.
19 окт 11, 12:51    [11465402]     Ответить | Цитировать Сообщить модератору
 Re: почему UPDATE работает правильно?  [new]
Glory
Member

Откуда:
Сообщений: 104751
PG81
даже с переводом могу привести, но из этого ничего не следует

ну так посчитайте сколько раз у вас упомянута таблица tab1 во FROM
19 окт 11, 12:53    [11465418]     Ответить | Цитировать Сообщить модератору
 Re: почему UPDATE работает правильно?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iljy
И кстати, второй вариант записи в скуле так же допустим.
Нет, недопустим!
Алиасы вводятся только во FROM
C недавних пор ещё в MERGE.
19 окт 11, 13:00    [11465483]     Ответить | Цитировать Сообщить модератору
 Re: почему UPDATE работает правильно?  [new]
iljy
Member

Откуда:
Сообщений: 8711
iap,

а, ну да, на первый алиас я внимания не обратил.
19 окт 11, 13:02    [11465497]     Ответить | Цитировать Сообщить модератору
 Re: почему UPDATE работает правильно?  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
Glory,

так там написано только про то что псевдоним указывать или не указывать, а про то что обновяться записи удовлетворяющие условию указанному для таблицы во from второй раз нет нигде
19 окт 11, 13:34    [11465860]     Ответить | Цитировать Сообщить модератору
 Re: почему UPDATE работает правильно?  [new]
Glory
Member

Откуда:
Сообщений: 104751
PG81
Glory,

так там написано только про то что псевдоним указывать или не указывать, а про то что обновяться записи удовлетворяющие условию указанному для таблицы во from второй раз нет нигде

В какой второй раз ?
Обновляется _всегда_ таблица, указанная после update
Во фразе from и далее указывается то, как будет формироваться набор для обновления таблицы

Если во from обновляемая таблица встречается один раз, то серверу пофиг с какими алиасами вы там from написали. Вы ее там вообще можете не писать
update tab1
set fld = b.fld
from tab2 b where tab1.k=b.k
and tab1.z in (1,2)
19 окт 11, 13:45    [11465978]     Ответить | Цитировать Сообщить модератору
 Re: почему UPDATE работает правильно?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
PG81
в постгресе писал так тут вроде все ясно
Просто немного другой синтаксис.

Лучьше просто использовать алиасы, и проблем не будет.
19 окт 11, 17:13    [11467957]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить