2011-01-24 145 views
0

我有一個不尋常的查詢,這讓我找到卡住了MySQL查詢,刪除所有空格

表字段有:

id bigint 20 
name varchar 255 
desc text 

有具有相同名稱和desc多條記錄,但說明有一些在話猶如

之間

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

我需要找到那些有SI行多餘空格milar data

我怎樣才能找到這些,謝謝。

回答

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 

可能不會完美,你將不得不幾次調整更換部分,但這應該讓你開始。