次のフィールドを持つテーブルを作成しました。
Record:
Id int Primary Key, Auto Increment
ForeignId int
IsDuplicateRecord bit NULL
次に、いくつかのデータを挿入しました。
INSERT INTO Record (ForeignId)
VALUES (5), (5), (1), (2), (3)
その後、次の更新ステートメントを実行しました ( http://archive.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=DuplicateRowsにあります)。
UPDATE Record
SET IsDuplicateRecord = 1
WHERE Id IN (
SELECT MAX(Id)
FROM Record
GROUP BY ForeignId
HAVING COUNT(*) > 1
)
これまでのところ、クエリは 1 つの行に影響し、テーブルは次のようになります。
Id ForeignId IsDuplicateRecord
0 5 NULL
1 5 1
2 1 NULL
3 2 NULL
4 3 NULL
一瞬、すべてうまくいくと思ったので、うれしかったです。しかし、外の雲のように暗い疑いが頭をよぎりました。
INSERT INTO Record (ForeignId)
VALUES (1), (1)
上記のクエリを再度実行すると、次の結果が得られました。
Id ForeignId IsDuplicateRecord
0 0 NULL
1 5 1
2 1 NULL
3 2 NULL
4 3 NULL
5 1 NULL
6 1 1
そこで、StackOverflow にアクセスして、ID 5 の行にある IsDuplicatedRecord フィールドが 1 に更新されなかった理由を誰が説明できるか見てみようと思いました。あなたがそうですか?