Правильно ли это SQL:SQL запросов: Обновление от
UPDATE T1alias
SET T1alias.Row2 = T2alias.Row2
FROM
(
T1 AS T1alias
INNER JOIN
T2 AS T2alias
ON T1alias.Row1 = T2alias.Row1
)
Этот запрос, кажется, возвращает правильные результаты, но я не понимаю, почему. Я имею в виду, что предложение FROM относится к полному разному набору данных относительно таблицы T1, которая должна быть обновлена. F.e .:
T1 T2
---------------------- ----------------------
| Row1 | Row2 | Row3 | | Row1 | Row2 | Row3 |
---------------------- ----------------------
| 1 | 2 | 3 | | 1 | 7 | 8 |
--------------------- ----------------------
| 4 | 5 | 6 | | 9 | 10 | 11 |
---------------------- ----------------------
T1 INNER JOIN T2 ON T1alias.Row1 = T2alias.Row1
-------------------------------------------------------------
| T1.Row1 | T1.Row2 | T1.Row3 | T2.Row1 | T2.Row2 | T2.Row3 |
-------------------------------------------------------------
| 1 | 2 | 3 | 1 | 7 | 8 |
-------------------------------------------------------------
Так как я могу UPDATE T1 из присоединяемой таблицы?
По-моему, это разные разные наборы данных. Я бы понял запрос SQL, если она будет выглядеть следующим образом:
UPDATE T1alias
SET T1alias.Row2 = T2alias.Row2
FROM
(
T1 AS T1alias
INNER JOIN
T2 AS T2alias
ON T1alias.Row1 = T2alias.Row1
) AS T1T2JoinedAlias
WHERE T1T2JoinedAlias.Row1 = T1alias.Row1
Может кто-нибудь объяснить это мне, пожалуйста. (я работаю на Microsoft SQL Server 2008 R2)
См. [Этот вопрос] (http://stackoverflow.com/questions/2334712/update-from-select-using-sql-server) – Fabian
Ваш последний запрос неверен. Вы не можете иметь псевдоним для соединения таблицы в запросе обновления. – P5Coder
@Fabian, если вы имеете в виду комментарий «Это работает, используя UPDATE, чтобы перебирать INNER JOIN. Таким образом, ON действует как предложение WHERE, а INNER JOIN пропускает записи, которые не найдены в таблице JOINed». Но я был бы рад, если бы кто-нибудь мог объяснить это более подробно. – user1911091