0

次のようなテーブル構造を持つ既存のデータベースがあります。

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して、 とがそれぞれChildB1 つだけ存在するようにする必要があります。新しい構造はChildBChildA

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]

現在、両方のテーブルには、ChildAChildBテーブルの両方に、ほとんど重複しているいくつかの行が含まれています。この質問のために、各テーブルの行数は、任意の で同じであると仮定します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_NUMBERa を割り当てるにはどうすればよいですか?ChildA_IDChildB_ID

4

0 に答える 0