0

ときどき、私は Craigslist の広告に反応した人たちで調査募集データベースを更新しています。respondentID各回答者には、主キーである固有の が与えられます。

時々、人々はこれらの Craigslist 広告に複数回反応します。データベースに重複した人がいる可能性があると思いますが、これは悪いことです。

重複を防ぎ、情報を検索しやすくするためrespondentIDに、すべての採用テーブルの主キーを から に変更したいと考えています。Email私のデータベースには重複した電子メール レコードが既にある可能性があり、重複している場合はこれをクリーンアップする必要があります。

3 つの募集テーブルの現在のアーキテクチャは次のとおりです。

  1. RespondentID (PK)人口統計 - 、Email(これをPKにしたい)Phoneなどの列が含まれています
  2. ジャンル - 、 などRespondentID (PK)の列が含まれますHorror
  3. プラットフォーム - 、 などRespondentID (PK)の列が含まれます。TV

誰かをよりよく理解できるように、ある時点で 3 つのテーブルすべてを結合したいと考えています。

ここに私の質問があります:

  1. データベースに既にある重複した回答者を削除するにはどうすればよいですか? (同じ Email 値を持つため、重複しているかどうかはわかります。)
  2. 現在のアーキテクチャを考えると、データを台無しにすることなく、メールを主キーとして持つようにデータベースを移行するにはどうすればよいですか?
  3. 新しいアーキテクチャに移行した後、デモ、ジャンル、およびプラットフォーム テーブルに追加する前に、Craigslist 広告スプレッドシートの重複を削除するために使用できるプロセスは何ですか?

解決策についての私の考えは次のとおりです。

  1. バックアップ テーブルを作成します。3 つのテーブルを結合し、大きなテーブルを Excel にエクスポートします。Excel では、データ フィルタリングと条件付き書式を使用して重複するエントリを見つけ、手動で削除します。残念ながら、Excel をクラッシュさせる 20,000 レコードがあります。:( 主な問題は、SQL を使用してテーブル内の重複エントリを削除する方法がわからないことです。(また、bobdole@republican.com によるエントリが 2 つある場合、エントリは 1 つ残るはずです。) SQL と Access を含むよりスマートなソリューション?

  2. 各電子メール レコードが一意になったら、それぞれが電子メールを主キーとして使用する新しいテーブルを作成します。

  3. インポートしたいデータ内の重複を削除したい場合、Excel 内で簡単に実行できるはずです。次に、この SQL コマンドを使用して、現在のデータベースと受信データの間で重複を排除します。

    DELETE * from newParticipantsList
    WHERE Email in (SelectEmail from Demo)
    

Access の小さなテスト テーブルで現在のアーキテクチャを複製し、それを理解できるかどうかを確認します。全体として、テーブルの結合や SQL でのデータの削除の経験があまりないので、少し怖いです。

4

2 に答える 2

0

多分私は太っているだけかもしれませんが、既存のテーブルに新しい Identity 列を作成してみませんか? 重複していると思われるレコードはいつでも削除できますが、Identity 列はすべての状況で一意であることが保証されています。

電子メール列をチェックして、テーブルに挿入された新しいレコードが重複していないことを確認するのはあなた次第です。

于 2012-10-17T03:42:27.150 に答える
0

人口統計テーブルから重複を削除するには、次のようにします。

WITH RecordsToKeep AS (
SELECT  MIN(RespondentID) as RespondentID
    FROM    demographic 
GROUP BY Email 
) DELETE  demographic
FROM        demographic
LEFT JOIN   RecordsToKeep on RecordsToKeep.RespondentID = demographic.RespondentID
where   RecordsToKeep.RespondentID IS NULL

これにより、各メール アドレスの最初のレコードが保持され、残りは削除されます。ソースを削除する前に、ジャンル テーブルとプラットフォーム テーブルを再マッピングする必要があります。

将来的に何をすべきかという点では、データをステージング テーブルにインポートすることにより、SQL にすべての重複除外を実行させ、アドレスがまだ人口統計に含まれていない場合に個別のレコードのみをファイナルにインポートすることができます。テーブル。

電子メール アドレスを主キーに変更する必要はありません。文字列は、いくつかの理由で優れた主キーではありません。問題は重複キーではなく、データの挿入方法です。

于 2012-10-17T04:03:12.560 に答える