我正在SQL Server 2008 R2中进行数据迁移。我是SQL-Server noob,但我很了解Ingres和MySql。SQL Server:UPDATE语句,其中MAX查询
我需要将两个新字段的“默认值”设置为另一个表中的“当前值”。这是我第一次天真的尝试(我将如何在Ingres做到这一点)。
update rk_risk
set n_target_probability_ID = a.n_probability_ID
, n_target_consequence_ID = a.n_consequence_ID
from rk_assess a
WHERE a.n_assess_id = (
SELECT MAX(n_assess_id)
FROM rk_assess a2
WHERE a2.n_risk_id = a.n_risk_id
);
上面的查询执行没有在续集中的错误,不过这台ALL的n_target_probability_ID的& n_target_consequence_ID的到相同的值 ...的夺标最后一次评估(如并列为“最后评估这个风险“)。
的rk_assess
表中包含的评估记录的完整历史rk_risk
秒,我的使命是“默认”的新目标概率&后果的风险表中的值列从“当前”(即最后一个)评估记录。 rk_assess.n_assess_id
列是一个自动递增的标识符(一次设置不变),所以max-id应该是最后输入的记录。
我已经有一个搜索,无论是在谷歌和SO,并尝试了几个不同版本的查询,但我仍然坚持。这里有一些其他的史诗般的失败,并带有参考。
update rk_risk
set n_target_probability_ID = (select a.n_probability_ID from rk_assess a where a.n_assess_id = (select max(n_assess_id) from rk_assess a2 where a2.n_risk_id = a.n_risk_id) as ca)
, n_target_consequence_ID = (select a.n_consequence_ID from rk_assess a where a.n_assess_id = (select max(n_assess_id) from rk_assess a2 where a2.n_risk_id = a.n_risk_id) as ca)
;
http://stackoverflow.com/questions/6256844/sql-server-update-from-select
update r
set r.n_target_probability_ID = ca.n_probability_ID
, r.n_target_consequence_ID = ca.n_consequence_ID
from rk_risk r
join rk_assess a
on a.n_risk_id = r.n_risk_id
select r.n_risk_id
, r.n_target_probability_ID, r.n_target_consequence_ID
, ca.n_probability_ID, ca.n_consequence_ID
from rk_risk r
join rk_assess a
on a.n_risk_id = r.n_risk_id
http://stackoverflow.com/questions/4024489/sql-server-max-statement-returns-multiple-results
UPDATE rk_risk
SET n_target_probability_ID = ca.n_probability_ID
, n_target_consequence_ID = ca.n_consequence_ID
FROM (rk_assess a
INNER JOIN (
SELECT MAX(a2.n_assess_id)
FROM rk_assess a2
WHERE a2.n_risk_id = a.n_risk_id
) ca -- current assessment
任何指针将不胜感激。提前谢谢大家,甚至可以阅读这些。
干杯。基思。
是否必须在一个声明中完成? – WOPR 2011-06-17 04:42:30