Обновить таблицу на основе другой таблицы - PullRequest
8 голосов
/ 17 мая 2011

Я пытаюсь обновить столбец в таблице на основе другого столбца в другой таблице.

UPDATE eval e
   SET rank = (SELECT p.desc
                 FROM Position p
                WHERE p.id = e.faculty 
                  AND p.date >= '2011-05-20'
              )

p.id и e.faculty соответствуют.Я хочу обновить рейтинг с p.desc, если идентификаторы совпадают.(e.faculty и p.id)

Любая помощь будет отличной!:)

Ответы [ 2 ]

19 голосов
/ 17 мая 2011

Попробуйте для SQL Server:

UPDATE dbo.eval 
SET rank = p.desc
FROM dbo.Position p
WHERE p.id = eval.faculty and p.date >= '2011-05-20'

или если вам нужен псевдоним для базовой таблицы (по какой-либо причине), вам нужно сделать это:

UPDATE dbo.eval 
SET rank = p.desc
FROM dbo.eval e
INNER JOIN dbo.Position p ON p.id = e.faculty 
WHERE p.date >= '2011-05-20'
2 голосов
/ 17 мая 2011

Вам нужно ограничение в виде предложения WHERE; если вы используете EXISTS, вы можете основывать его на скалярном подзапросе, например,

UPDATE eval
   SET rank = (
               SELECT p.desc
                 FROM Position p
                WHERE p.id = eval.faculty 
                      AND p.date >= '2011-05-20'
              )
 WHERE EXISTS (
               SELECT *
                 FROM Position p
                WHERE p.id = eval.faculty 
                      AND p.date >= '2011-05-20'
              );

Обратите внимание, что вышеуказанные цели UPDATE в базовой таблице eval, а не имя корреляции e. Это имеет больше смысла, когда вы думаете о SQL UPDATE с точки зрения реляционного присваивания, то есть вы не хотите присваивать e, потому что он (в отличие от базовой таблицы) выйдет за рамки!

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