MySQLバージョン 5.0.95
NAMEテーブル、カラム(id,name)に於いて
1,田中 太郎
2,田中 太郎
3,田中 太郎
4,佐藤 太郎
5,佐藤 太郎
6佐藤 太郎
等あらゆる空白が入った重複するデータが入ったテーブルがあります(どのように空白が入っているかは解らない。半角なのか全角なのか、それらの空白がどれだけ連続するのかも解らない)。
NAMEテーブルの中身を、重複した、空白を無視した状態の文字列を一つ残したまま削除した状態にしたいです。
つまり
変更後
田中 太郎
佐藤 太郎
ようなテーブルに更新(変更、作り直し)したいです。
ただし、一つ残すそのデータにもともと含まれていた空白はそのままにしたいです。田中 太郎でも田中 太郎でも、どれでも良いから一つ空白が入っていたままの状態で残したいです。
考えたことは以下です。
①nameテーブルから全ての空白をreplaceにより詰めたデータを、一時的なテーブルの中に追加する。(newnameというテーブル名)
②newnameの中で重複するデータを見つけてidの若い方を残し、それ以外を削除する。
③nameテーブルに於いてnewnameにあるidと同じidを見つけたら削除する。 という形式でコードを書けば、空白は元のままで重複する余分なデータを削除できるのではないかと考えたのですが、無理はないでしょうか。無理がなければ、 このようなコードはどのようにしたら書けるのでしょうか。
試したコードは
mysql
1create temporary table newname( 2idx int, 3name varchar(255) 4); 5 6INSERT into newname(idx,name) 7select 8 id 9 ,name 10 ,case 11 when instr(name,' ')>0 12 then replace(replace(name,' ',''),' ','') 13 14 when instr(name,' ')>0 15 then replace(replace(name,' ',''),' ','') 16 end as newname 17 from test 18
この段階で1136番のエラが返ってきます。
カラムの数があっていないとあります。idx,nameとid,nameの指定なのでカラムの数は合っていると思うのですが、どこを見落としているのでしょうか。

