我正在尝试根据另一个表中的另一列更新表中的列。
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
)
任何帮助都会很棒! :)
答案 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
,因为它(与基表不同)将超出范围!