2011-01-24 8 views
0

私は私が今MySQLのクエリ、すべてのスペースを削除

を捕まってしまった珍しいクエリ、テーブルのフィールドを持っている:

id bigint 20 
name varchar 255 
desc text 

あり、同じ名前とDESCを持つ多くのレコードがありますが、DESCはいくつかを持っています私は、Siを持っているそれらの行を見つける必要がある

1 't1' 'hello world' 
2 't2' 'hello    world' 

よう

単語の間に余分なスペースこれらのデータはどのように見つけることができますか?ありがとうございました。

答えて

2

これはかなり近いです。仮定すると:

+-------+---------+------+-----+---------+-------+ 

| Field | Type | Null | Key | Default | Extra | 
+-------+---------+------+-----+---------+-------+ 
| d  | text | YES |  | NULL |  | 
| id | int(11) | YES |  | NULL |  | 
+-------+---------+------+-----+---------+-------+ 

を次にこのクエリ:

select x.id,x2.id,x.d,x2.d from x left join x as x2 on replace(x.d," ","") = replace(x2.d," ","") and x.id != x2.id having !(x2.id is null); 

はあなたに重複行を取得します。 「Helloworld」(つまりスペースなし)があり、それに一致させたくない場合は失敗します。

0

元のデータを保持する必要がない場合を除いて、挿入時に、比較時にレコードを作成/更新するのではなく、後で行うのが最適です。

言われて、あなたは

SELECT id, name, desc, REPLACE(desc, ' ', ' ') as replaced 
             xx x <--note the number of spaces 
FROM table 
GROUP replaced 
HAVING replaced > 1 

ような何かを行うことができますおそらくない完璧でしょう、そしてあなたは、交換部分を数回調整する必要がありますが、これはあなたが始める必要があること。

関連する問題