ヘイ、私はPDFドキュメントをクロールし、ドキュメント内のすべての単語をMySQLデータベースのテーブルに記録するスパイダーを作成しました。
明らかに、「the」、「and」、「or」などの単語は、本に何度も登場します。
テーブルから重複値を削除する最も簡単な方法は何ですか?
ヘイ、私はPDFドキュメントをクロールし、ドキュメント内のすべての単語をMySQLデータベースのテーブルに記録するスパイダーを作成しました。
明らかに、「the」、「and」、「or」などの単語は、本に何度も登場します。
テーブルから重複値を削除する最も簡単な方法は何ですか?
単語にインデックスを付けずにテーブルを作成し、一括挿入を使用して本のすべての単語を入力します(LOAD DATAを使用することもできます)。挿入が完了したら、word
フィールドに新しいインデックスを追加します
次に、以下を使用して2番目のテーブルを作成します。
CREATE TABLE newTable SELECT DISTINCT word FROM oldTable
重複を削除する代わりに、重複がテーブルに入らないようにすることができます。
テーブルにidとwordの2つのフィールドしかない場合:
INSERT INTO table SELECT null, 'word' FROM table WHERE NOT EXISTS (SELECT * FROM table WHERE word = 'word') LIMIT 1;
これにより、単語がまだテーブルにない場合にのみ、その単語がテーブルに挿入されます。
スクリプトを再実行してデータベースにデータを入力できる場合は、「word」フィールドに一意のキーを追加し、INSERTINTOの代わりにREPLACEINTOを実行できます。これにより、重複フィールドを追加する前に、レコードの前のインスタンスが削除されます。これは最も効率的な方法ではないかもしれませんが、かなり簡単です。詳細については、こちらをご覧ください。
delete from words where idcolumn not in
(select min(idcolumn)
from words T2
where T2.plain = WordsTable.plain)
(idcolumn, plain)
これは、見つけたすべての単語に追加した場合に機能します。
id列(pk)がない場合は、Anaxのソリューションを使用できます。
重複を挿入しないことに加えて(コードバーガーコメント)、プレーン列に一意のインデックスを設定するだけです。
単語フィールドでdistinctを選択してから、IDが異なるすべての行を削除しますか?私はサブクエリのマスターではないので、ATMの例はありません:)