ОБНОВЛЕНИЕ с использованием оператора выбора и внутреннего соединения - PullRequest
1 голос
/ 11 января 2012
UPDATE TABLE1 set TABLE1.col1 = TABLE2.col1
FROM TABLE2 INNER JOIN TABLE3 ON COL2 = TABLE2.COL2
WHERE TABLE1.COL3 = TABLE3.COL3

Будет ли работать вышеуказанный запрос, если JOIN возвращает несколько строк для одного условия?Я не могу обновить его, несмотря на то, что могу индивидуально набрать Join Table3 и Table2.

Пожалуйста, помогите.Надеюсь, информации достаточно.

Ответы [ 3 ]

3 голосов
/ 11 января 2012

Если имеется несколько строк, то для обновления будет использоваться произвольная строка.Никаких ошибок не будет.Вы можете сделать обязательным, чтобы одна строка возвращалась объединением, изменяя ОБНОВЛЕНИЕ на MERGE

2 голосов
/ 11 января 2012

Поскольку вы работаете в SQL Server 2005, MERGE вам недоступен.

Чтобы получить детерминированный результат, вам нужен коррелированный подзапрос.

UPDATE TABLE1
SET    TABLE1.col1 = ISNULL((SELECT TOP (1) TABLE2.col1
                             FROM   TABLE2
                                    INNER JOIN TABLE3
                                      ON TABLE3.COL2 = TABLE2.COL2
                             WHERE  TABLE1.COL3 = TABLE3.COL3
                             ORDER  BY TABLE2.col1), TABLE1.col1)  
1 голос
/ 11 января 2012

Нет, вам нужно выбрать только одну строку из таблицы 2 - сервер SQL выберет любую подходящую строку из таблицы 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...