【问题标题】:Removal of records with duplicate values in certain columns?删除某些列中具有重复值的记录?
【发布时间】:2014-09-02 18:52:42
【问题描述】:

我有以下表格 STG,有 200 万条记录 -

STG(ACCT_NUM,NAME,ADDRESS,CITY,STATE)

我添加了列 SSN nvarchar(255) NULL 并重新插入了 200 万条记录。现在我想删除 在 SSN 中没有任何值但其他列值匹配的 duplicate 记录,因为 SSN 被插入为 null一些记录。

我想删除那些所有其他列值都匹配但 SSN 不匹配的重复记录。有一些 SSN 为空的唯一记录。我不希望它们被删除。

【问题讨论】:

  • 请告诉我您的 SSN 列不是社会安全号码。如果是,请告诉我它们是加密的。除非您确实需要,否则不应存储 SSN。帮您自己和您的公司一个忙,如果不是更早,请立即对其进行加密。这些数据非常敏感,不对其进行加密对您的公司来说是不负责任和危险的。
  • @SeanLange - 谢谢肖恩,但它不是社会安全号码。还是谢谢!
  • LOL 使用有意义的名称而不是缩写的另一个原因。 :)
  • 您已编辑问题,但存在相互冲突的信息。首先,您说要删除没有 SSN 的行,然后您说要保留其中的一些。这里有什么规则?

标签: sql sql-server duplicate-removal


【解决方案1】:

这应该是您删除 SSN 值为 NULL 的记录所需的全部内容。

DELETE FROM STG
WHERE SSN IS NULL;

编辑:

根据以下评论,这是您尝试执行的 MySQL 解决方案:

DELETE FROM STG
    WHERE SSN IS NULL
    AND (ACCT_NUM, NAME, ADDRESS, CITY, STATE)
    IN (SELECT ACCT_NUM, NAME, ADDRESS, CITY, STATE FROM 
        (SELECT * FROM STG) AS STG1 WHERE SSN IS NOT NULL);

【讨论】:

    【解决方案2】:

    由于信息不完整且当前要求冲突,这里有点猜测。

    with MyDeleteCTE as
    (
        SELECT 
            ACCT_NUM
            ,NAME
            ,ADDRESS
            ,CITY
            ,STATE
        FROM STG s1
        left join STG s2 on 
            s1.ACCT_NUM = s2.ACCT_NUM
            and s1.NAME = s2.NAME
            and s1.ADDRESS = s2.ADDRESS
            and s1.CITY = s2.CITY
            and s1.STATE = s2.STATE
            and s1.SSN <> s2.SSN
    )
    
    delete MyDeleteCTE
    

    【讨论】:

      【解决方案3】:
      DELETE s1
          FROM STG s1
          INNER JOIN STG s2 on 
              s1.ACCT_NUM = s2.ACCT_NUM
              and s1.NAME = s2.NAME
              and s1.ADDRESS = s2.ADDRESS
              and s1.STATE = s2.STATE
              and s1.CITY = s2.CITY
              and s1.SSN <> s2.SSN
              and (isnull(s1.SSN,'')='' OR s1.SSN is null)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-23
        • 2023-02-04
        • 1970-01-01
        • 2016-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多