更新包含多行的链接表

时间:2013-03-21 14:55:38

标签: sql sql-server tsql join sql-server-2000

我有一个现有的数据库,其表结构如下:

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]

为了支持将来的功能,我需要ChildAChildB的链接行,以便每个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]

现在,两个表都在ChildAChildB表中包含几个重复的行。为了这个问题,我们假设每个表中的行数对于任何给定的Parent_Id都是相同的。我需要为每个ChildA选择一个唯一的ChildB,即使我必须随机选择它们。

这适用于每个表中只有一行的情况:

UPDATE b
SET    [ChildA_ID] = a.[ChildA_ID]
FROM   [ChildB] b
       INNER JOIN [ChildA] a ON a.[Parent_ID] = b.[Parent_ID]

我没有任何其他条件可以添加到JOIN。我认为ROW_NUMBER可以工作,但是这个数据库在SQL Server 2000上运行。当有多个记录时,如何为每个ChildA_ID分配ChildB_ID

0 个答案:

没有答案