次のようなテーブル構造を持つ既存のデータベースがあります。
TABLE [Parent]
[Parent_ID] UNIQUEIDENTIFIER
TABLE [ChildA]
[ChildA_ID] INT
[Parent_ID] UNIQUEIDENTIFIER FK -> [Parent].[Parent_ID]
TABLE [ChildB]
[ChildB_ID] INT
[Parent_ID] UNIQUEIDENTIFIER FK -> [Parent].[Parent_ID]
将来の機能をサポートするには、 と の行をリンクChildA
して、 とがそれぞれChildB
1 つだけ存在するようにする必要があります。新しい構造はChildB
ChildA
TABLE [ChildA]
[ChildA_ID] INT
[Parent_ID] UNIQUEIDENTIFIER FK -> [Parent].[Parent_ID]
TABLE [ChildB]
[ChildB_ID] INT
[ChildA_ID] INT FK -> [ChildA].[ChildA_ID]
[Parent_ID] UNIQUEIDENTIFIER FK -> [Parent].[Parent_ID]
現在、両方のテーブルには、ChildA
とChildB
テーブルの両方に、ほとんど重複しているいくつかの行が含まれています。この質問のために、各テーブルの行数は、任意の で同じであると仮定しますParent_Id
。ランダムに選択する必要がある場合でも、ChildA
それぞれに一意のものを選択する必要があります。ChildB
これは、各テーブルに正確に 1 つの行がある場合に機能します。
UPDATE b
SET [ChildA_ID] = a.[ChildA_ID]
FROM [ChildB] b
INNER JOIN [ChildA] a ON a.[Parent_ID] = b.[Parent_ID]
に追加する他の基準はありませんJOIN
。うまくいくと思いますが、このデータベースは SQL Server 2000 で実行されています。複数のレコードがある場合、それぞれにROW_NUMBER
a を割り当てるにはどうすればよいですか?ChildA_ID
ChildB_ID