如何删除重复项并更新“一对多”相关表?

时间:2014-01-08 14:45:25

标签: sql tsql

我搜索过,也许我没有正确地提出这个问题。

我继承了一个讨厌的数据库,并试图“规范化”它。 我把一张桌子分成了两个:业主和建筑物 现在我有两张一对一的桌子。

我知道如何删除重复记录(在Owners表中),但我不知道如何更新“一对多”相关表。

我有一张桌子“业主”和一张桌子“业主(一个)到建筑物(很多)”

“所有者”表架构:

CREATE TABLE
    [dbo].[tbl_BuildingOwners]
(
    [OwnerID] [int] IDENTITY(1,1) NOT NULL,
    [OwnerName] [nvarchar](255) NULL,
    [OwnerAddress1] [nvarchar](255) NULL,
    [OwnerAddress2] [nvarchar](255) NULL,
    [OwnerAddress3] [nvarchar](255) NULL,
    [OwnerCity] [nvarchar](255) NULL,
    [OwnerState] [nvarchar](255) NULL,
    [OwnerZip] [float] NULL,
    [OwnerZipExt] [float] NULL,
    [OwnerPhone] [nvarchar](255) NULL,
    [OwnerFax] [nvarchar](255) NULL
)

“所有者(一个)到建筑物(很多)”关系表模式:

CREATE TABLE
    [dbo].[BuildingOwnerID]
(
    [OwnerRelationshipID] [int] IDENTITY(1,1) NOT NULL,
    [OwnerID] [int] NOT NULL,
    [FileNumber] [nvarchar](255) NOT NULL
)

我需要删除BuildingOwners表中的重复项,并将BuildingOwnerID表中的OwnerID更新为BuildingOwners表中保留的DISTINCT OwnerID。

我希望这是有道理的。

I have already tried this但无法让它对我有用。最后,我可以使用更简单的SQL服务器或MS Access。

1 个答案:

答案 0 :(得分:0)

要删除重复内容,您可以使用以下查询(示例查询删除重复的状态条目[按国家/地区和州重复])....

WITH    dupDel
          AS ( SELECT   ROW_NUMBER() OVER ( PARTITION BY country, STATE ORDER BY country ) AS RowNum
               FROM     tblTest
             )
    DELETE  FROM dupDel
    WHERE   RowNum > 1