基于另一个表的更新表
我想基于另一个表中的另一列更新表中的一列。基于另一个表的更新表
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
对应。如果ID相同,我想更新排名p.desc
。 (e.faculty
和p.id
)
任何帮助将是伟大的! :)
试试这个为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'
以秒为单位打败我。 – AllenG 2011-05-16 21:03:30
有没有办法在更新的表上使用这个语法和别名?例如,这是无效的:'UPDATE @Y SET Field = X.Field FROM @X AS X WHERE @ Y.Key = X.Key'。我通常会使用'UPDATE Y SET Field = X.Field FROM @Y AS Y INNER JOIN @X AS X ON Y.Key = X.Key',但这有点冗长。 – 2011-05-16 21:18:36
@所有交易:请参阅我的更新回复 – 2011-05-16 21:19:53
您需要限制条款的形式为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'
);
注意上述目标的基表eval
,而不是相关名e
的UPDATE
。当从关系分配的角度考虑SQL UPDATE
时,这会更有意义,也就是说,您不想分配给e
,因为它(不像基表)将超出范围!
您使用的是什么RDBMS? – 2011-05-16 21:01:11