【问题标题】:Avoid duplicates on INSERT INTO SELECT query in SQL Server避免 SQL Server 中的 INSERT INTO SELECT 查询重复
【发布时间】:2020-03-16 17:15:41
【问题描述】:

如何使用下面提供的查询避免重复

INSERT INTO dbo.Entities(EntityId, [Name], [Description], [Type], Source)
    SELECT DISTINCT 
        CUST_CODE, NAME, FULLDESCRIPTION, 'Agency' AS Type, 'SunDbAgencies' AS Source
    FROM dbo.VW_SUNDB_AGENCIES 

我已经在这里尝试了所有答案:

Avoid duplicates in INSERT INTO SELECT query in SQL Server 无济于事。

重复项在dbo.VW_SUNDB_AGENCIES TABLES 而不是INSERT 表中,所以我想我需要一种在插入之前从选择中删除重复项的方法

这是重复项之一,这就是为什么简单的 distinct 不起作用的原因:

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    问题是select distinct 不够用。基础表中仍有重复项,但名称或描述不同。

    我认为这是一个问题。但是,您可以通过使用row_number() 为每个cust_code 选择任意一行来解决它:

    insert into dbo.Entities (EntityId, [Name], [Description], [Type], Source)
      select CUST_CODE, NAME, FULLDESCRIPTION, 'Agency' AS [Type], 'SunDbAgencies' AS Source
      from (select a.*,
                   row_number() over (partitoin by cust_code order by cust_code) as seqnum
            from dbo.VW_SUNDB_AGENCIES a
           ) a
      where seqnum = 1 and
            not exists (select 1 from dbo.Entities E where A.CUST_CODE = E.EntityId);
    

    【讨论】:

    • 视图肯定有问题,但我改不了。提供的脚本完美运行。谢谢
    • 几天前我也遇到了同样的问题。我喜欢“Where rownumber = 1”的解决方案。非常非常非常优雅。
    猜你喜欢
    • 2011-01-31
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多