我正在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