0
我有以下查詢,它會從表中生成結果的子集。這些結果是〜3000,並有〜23萬個魚卵在狀態表:聲明試圖更新不在子選擇中的記錄
SELECT ms1.* FROM STATUS MS1
INNER JOIN
(
SELECT MS.EndDate as MDT, MS.ID, MS.StatusID, MS.StartDate
FROM MEMBER M
INNER JOIN STATUS MS ON MS.ID = M.ID
AND MS.StartDate =(SELECT MAX(StartDate) FROM STATUS WHERE STATUS.ID = M.ID)
WHERE MS.EndDate IS NOT NULL
GROUP BY MS.ID, MS.StatusID, MS.EndDate, MS.StartDate) MS2
ON MS1.ID = ms2.ID AND MS1.StatusID = MS2.StatusID
正是這些記錄從我要更新的查詢返回。然後我把上面的查詢和更新語句像這樣把它包:
UPDATE STATUS
SET EndDate = NULL
WHERE EXISTS
(
INNER JOIN
(
SELECT MS.EndDate as MDT, MS.ID, MS.StatusID, MS.StartDate
FROM MEMBER M
INNER JOIN STATUS MS ON MS.ID = M.ID
AND MS.StartDate =(SELECT MAX(StartDate) FROM STATUS WHERE STATUS.ID = M.ID)
WHERE MS.EndDate IS NOT NULL
GROUP BY MS.ID, MS.StatusID, MS.EndDate, MS.StartDate) MS2
ON MS1.ID = ms2.ID AND MS1.StatusID = MS2.StatusID
)
我得到一個違反了創紀錄的,是不是在原來的選擇從上面唯一鍵約束,所以更新的嘗試更新行我不期望它更新。我得到的消息是:
違反UNIQUE KEY約束'UK_status_ID_ENDDATE'。不能在對象'dbo.STATUS'中插入重複鍵。重複的鍵值是(3,)。
我不知道我在做什麼錯。
看上去好像這種方法將工作有點像,雖然更新仍然是由於我的數據未能問題(子查詢我開始)。現在試圖將其排除。謝謝。 – Baub