テーブルから結果のサブセットを生成する次のクエリがあります。これらの結果は ~3000 で、ステータス テーブルには ~230,000 の卵があります。
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 ステートメントでラップします。
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, ) です。
何が間違っているのかわかりません。