2017-01-06 3 views
0

私はこの特定の基準に基づいて私のテーブルに重複を見つけるステートメントを持っています。このselect duplicates文をどのようにして更新プログラムに変換できますか?

選択は次のとおりです。

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' 

このアップデートステートメントの作成方法については、どのような考えですか?

答えて

0

私は、これはそれを行う必要があると考えていますが、私は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

エラーは発生しませんが、実行に長時間かかるようです。常に0%のプロセスで固執するようです。 130万レコードありますが、ほとんどのクエリは15秒以内に実行されます(基本選択は約10秒で実行されます)。なぜそんなに遅いの? – rohanharrison

+0

それはAccessのレコードの公正な塊で、私は 'UPDATE'が' SELECT'よりもかなり長くかかると思っていますが、どれくらい長く合理的であるかは不明です。 2番目のクエリを試して、それがよりうまく実行されるかどうかを確認することができます、私は彼らがほぼ同じであると思います。 –

+0

時間がかかり過ぎてはいけません。更新されるのは609の重複レコードだけです。私は2番目のクエリを試みます。 – rohanharrison

関連する問題