0

ヘイ、私はPDFドキュメントをクロールし、ドキュメント内のすべての単語をMySQLデータベースのテーブルに記録するスパイダーを作成しました。

明らかに、「the」、「and」、「or」などの単語は、本に何度も登場します。

テーブルから重複値を削除する最も簡単な方法は何ですか?

4

5 に答える 5

3

単語にインデックスを付けずにテーブルを作成し、一括挿入を使用して本のすべての単語を入力します(LOAD DATAを使用することもできます)。挿入が完了したら、wordフィールドに新しいインデックスを追加します

次に、以下を使用して2番目のテーブルを作成します。

CREATE TABLE newTable SELECT DISTINCT word FROM oldTable
于 2009-09-30T11:47:08.573 に答える
1

重複を削除する代わりに、重複がテーブルに入らないようにすることができます。

テーブルにidとwordの2つのフィールドしかない場合:

INSERT INTO table SELECT null, 'word' FROM table WHERE NOT EXISTS (SELECT * FROM table WHERE word = 'word') LIMIT 1;

これにより、単語がまだテーブルにない場合にのみ、その単語がテーブルに挿入されます。

于 2009-09-30T11:41:08.953 に答える
1

スクリプトを再実行してデータベースにデータを入力できる場合は、「word」フィールドに一意のキーを追加し、INSERTINTOの代わりにREPLACEINTOを実行できます。これにより、重複フィールドを追加する前に、レコードの前のインスタンスが削除されます。これは最も効率的な方法ではないかもしれませんが、かなり簡単です。詳細については、こちらをご覧ください。

http://dev.mysql.com/doc/refman/5.0/en/replace.html

于 2009-09-30T12:28:40.543 に答える
0
delete from words where idcolumn not in
  (select min(idcolumn) 
   from words T2 
   where T2.plain = WordsTable.plain)

(idcolumn, plain)これは、見つけたすべての単語に追加した場合に機能します。

id列(pk)がない場合は、Anaxのソリューションを使用できます。

重複を挿入しないことに加えて(コードバーガーコメント)、プレーン列に一意のインデックスを設定するだけです。

于 2009-09-30T11:32:19.110 に答える
0

単語フィールドでdistinctを選択してから、IDが異なるすべての行を削除しますか?私はサブクエリのマスターではないので、ATMの例はありません:)

于 2009-09-30T11:33:34.157 に答える