【问题标题】:How can I convert this select duplicates statement to an update?如何将此选择重复语句转换为更新?
【发布时间】:2017-01-06 16:09:14
【问题描述】:

我有这个 select 语句,它根据某些条件在我的表中查找重复项。

选择是:

select  DIVISION, FIPS_COUNTY_CODE, LAST, SUFFIX, FIRST, TITLE, BIRTHDATE, count(*)
  from work
  group by  DIVISION, FIPS_COUNTY_CODE, LAST, SUFFIX, FIRST, TITLE, BIRTHDATE
  having count(*) > 1

我想将其转换为将字母附加到表中的字段的更新。例如,

UPDATE [WORK] SET BAD_CODES = BAD_CODES  & 'D'

关于如何制作此更新声明的任何想法?

【问题讨论】:

    标签: sql ms-access select duplicates


    【解决方案1】:

    我认为应该这样做,但我对 Access 不是很熟悉:

    UPDATE [WORK] 
    SET BAD_CODES = BAD_CODES  & 'D'
    WHERE EXISTS (SELECT DIVISION, FIPS_COUNTY_CODE, LAST, SUFFIX, FIRST, TITLE, BIRTHDATE, COUNT(*)
                  FROM work b
                  WHERE [WORK].DIVISION = b.DIVISION
                    AND [WORK].FIPS_COUNTY_CODE = b.FIPS_COUNTY_CODE
                    AND [WORK].LAST = b.LAST
                    AND [WORK].SUFFIX = b.SUFFIX
                    AND [WORK].FIRST = b.FIRST
                    AND [WORK].TITLE = b.TITLE
                    AND [WORK].BIRTHDATE = b.BIRTHDATE
                  GROUP BY DIVISION, FIPS_COUNTY_CODE, LAST, SUFFIX, FIRST, TITLE, BIRTHDATE
                  HAVING COUNT(*) > 1
                 )
    

    这应该是等效的,但是如果您想在更新中使用子查询中的值,这很有用:

    UPDATE T 
    SET    BAD_CODES = BAD_CODES  & 'D'
    FROM   work AS T 
    JOIN (SELECT DIVISION, FIPS_COUNTY_CODE, LAST, SUFFIX, FIRST, TITLE, BIRTHDATE, COUNT(*)
          FROM work                      
          GROUP BY DIVISION, FIPS_COUNTY_CODE, LAST, SUFFIX, FIRST, TITLE, BIRTHDATE
          HAVING COUNT(*) > 1
          ) AS S
      ON  T.DIVISION = S.DIVISION
      AND T.FIPS_COUNTY_CODE = S.FIPS_COUNTY_CODE
      AND T.LAST = S.LAST
      AND T.SUFFIX = S.SUFFIX
      AND T.FIRST = S.FIRST
      AND T.TITLE = S.TITLE
      AND T.BIRTHDATE = S.BIRTHDATE
    

    【讨论】:

    • 它不会为此引发错误,但它似乎需要很长时间才能运行。它似乎总是坚持 0% 的过程。有 130 万条记录,但大多数查询在 15 秒内运行(我所做的基本选择在大约 10 秒内运行)。任何想法为什么它这么慢?
    • 这是相当多的 Access 记录,我预计 UPDATESELECT 花费的时间要长得多,但不确定多长时间是合理的。您可以尝试第二个查询,看看它是否表现更好,我认为它们大致相同。
    • 应该不会花太长时间。仅更新了 609 条重复记录。我将尝试第二个查询。
    • 它说它缺少一个运算符。我去找找,撑住。如果你知道它在哪里,请告诉我。
    • 复制联接条件时没有更新表别名,现在更新。
    猜你喜欢
    • 2020-04-03
    • 2013-09-29
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多