根据另一个表更新表

时间:2011-05-16 20:59:13

标签: sql sql-update

我正在尝试根据另一个表中的另一列更新表中的列。

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

p.ide.faculty对应。如果id是相同的,我想用p.desc更新排名。 (e.facultyp.id

任何帮助都会很棒! :)

2 个答案:

答案 0 :(得分:19)

尝试使用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'

答案 1 :(得分:2)

您需要以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,因为它(与基表不同)将超出范围!