2017-08-27 9 views
0

私は「本」は「名前」列の値は、それを繰り返している自己、テーブル内のすべての行をカウントするために、このクエリを使用しています:REGEXPまたはワイルドカードを考慮して、MYSQLで重複する値を持つ行を数えるには?

SELECT name, COUNT(*) c FROM books GROUP BY name HAVING c > 1 

事は、私は非常によく似た本を治療したいということであり、名前を「重複」とみなします。たとえば、「Good Book」と「Good Book」という本があります。同一とみなされる。 REGEXPとワイルドカードを使用する方法は多かれ少なかれ知っていますが、使用しているクエリに組み込む方法がわかりません(もし可能ならば..)。

これを達成する方法はありますか?

+0

たぶんあなたの代わりに正規表現のフルテキストインデックスを検討すべきです。 –

+0

すみませんが...「フルテキストインデックス」とはどういう意味ですか? – sheff2k1

+0

https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html –

答えて

1

SOUNDEX呼ばMYSQLの文字列関数があります。それは長い距離ですが、あなたが必要とするものだけを行うかもしれません。 SOUNDEXは、同じ方法で聞こえる2つのテキスト文字列に対して同じ "code-string"を返す必要があります。だから、あなたはそれはあなたがしたいかどうかを尋ねからはっきりしていないとしてあなたは、あなたが達成したい効果についてより具体的に必要となる正規表現を使用してサイズ

SELECT SOUNDEX(name) as sname, COUNT(*) c FROM books GROUP BY sname HAVING c > 1

のためにこれを試すことができますthis link for more about SOUNDEX

を参照してください。句読点を削除するか、似ているかどうかを確認するだけです。アプローチを探して

フォワードは、例えば、その列を移入するのはUNIFORM_NAMEを言うと、別のツール/プロセスを持たせ、別の列を追加することですテーブルに項目を追加するとき。このようなクエリを複数回実行する予定がある場合は、これは非常に便利です。この新しい列に対してSQLコードを使用するだけで、比較のために名前を調和させる新しい(より良い)方法を考案した場合、名前と新しいアルゴリズムに基づいて新しい列を更新できます。それ以上の変更は必要ありません。

+0

よく、ヒントをありがとうございます。私はちょうどサーバー側のロジックを使用してこの問題を解決します。私はちょうどSQLのアプローチがより "エレガント"になるだろうと思った。 – sheff2k1

関連する問題