Обновление с внутренним объединением, обновление 2 столбцов из обеих таблиц - PullRequest
3 голосов
/ 27 января 2010

Это мой запрос в SQL Server 2008 -

    UPDATE a 
       SET a.col2 = 'new', 
           a.col3 = 'www.google.com', 
           b.col1 = '10'
      FROM table a 
INNER JOIN table b ON a.col1 = b.col1 
     WHERE a.col1 = 7

Вылетает сообщение "Неверное имя столбца b.col1."

Как мне сделать эту работу?

Ответы [ 4 ]

9 голосов
/ 27 января 2010

Одновременно можно обновлять только 1 таблицу

вам нужно выдать 2 оператора обновления

UPDATE a SET a.col2='new', a.col3='www.google.com'
FROM tablea a INNER JOIN tableb  b ON a.col1 = b.col1
WHERE a.col1=7

UPDATE b SET b.col1='10' 
FROM tablea a INNER JOIN tableb b ON a.col1 = b.col1
WHERE a.col1=7
4 голосов
/ 27 января 2010

Если вы посмотрите на ваш запрос немного ближе, у вас есть b.Col1 в выражении UPDATE. это неверно

UPDATE  a
SET a.col2='new', 
        a.col3='www.google.com', 
        b.col1='10' 
FROM    @table a INNER JOIN 
        @table b ON a.col1 = b.col1 
WHERE   a.col1=7

С ОБНОВЛЕНИЕ Вы можете обновлять только 1 таблицу за раз

1 голос
/ 27 января 2010

Ваш оператор - «Обновить A», и вы пытаетесь обновить столбец в таблице B. Возможно, вы захотите создать представление, содержащее столбцы в таблицах A и B, и обновить его. Вы также можете создать триггеры для таблицы A - возможно, те, которые обновят соответствующий объединенный столбец в таблице B.

0 голосов
/ 31 января 2013

Для обновления значения столбца в 1 таблице на основе условия для другого столбца во второй таблице это работает для меня:

UPDATE TableA 
SET TableA.col1 = 'dummyVal'
WHERE TableA .ACCID IN (SELECT ACCID FROM TableB WHERE TableB.PRODID LIKE 'XYZ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...