2011-09-16 7 views
0

したがって、アドレス、都市、州、および郵便番号の列を含むデータベースがあります。問題は、アドレス欄に住所、市区町村、州、および郵便番号が含まれていることです。これらはすでに列なので、私はアドレス列にそれらを必要としません。都市、州、および郵便番号に一致する住所の列からデータを動的に削除する方法はありますか?データベースには50,000以上の行があります。mysql:別のカラムに含まれるカラムからテキストを削除する

REPLACEとの可能性はなく、行うことが散らかっ
+0

これはテーブルですか?削除する条件は何ですか?詳細に説明する。 –

+0

アドレスの形式はデータベース全体で一貫していますか? I.それは常に 'アドレス、市、州のzip'ですか? – Catfish

+0

ここで最大の問題はコンテンツのばらつきです。あなたのデータが私が見た他のDBのようなものなら、ほとんどの場合、不正なデータが含まれているものもあれば、そうでないものもあれば、すべてではないものもあります。さらに、コンマで区切られている場合もあれば、時にはそうでない場合もあります。また、アドレスフィールドのデータが別のフィールドと一致しないこともあります。あなたの提案は潜在的に破壊的なものなので、私のアドバイスはあなたがしていることに非常に注意することです。データの一部を完全に失うよりも、それを持つ方がよいでしょう。 – Spudley

答えて

0

:あなたの形式は非常に規則的でない(あるいはあなたが発生した郵便番号、州または都市値を持っている場合は

mysql> create table `m2` (`id` int(11) auto_increment, a TEXT, b TEXT, PRIMARY KEY (`id`)) ENGINE=InnoDB; 
Query OK, 0 rows affected (0.06 sec) 

mysql> insert into `m2` (a, b) VALUES ('200 Honolulu Drive Los Angeles CA 89999','89999'); 
Query OK, 1 row affected (0.01 sec) 

mysql> select * from m2; 
+----+-----------------------------------------+-------+ 
| id | a          | b  | 
+----+-----------------------------------------+-------+ 
| 1 | 200 Honolulu Drive Los Angeles CA 89999 | 89999 | 
+----+-----------------------------------------+-------+ 
1 row in set (0.00 sec) 

mysql> update `m2` set a = TRIM(REPLACE(a, b,'')) WHERE id = 1; 
Query OK, 1 row affected (0.06 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

mysql> select * from m2; 
+----+-----------------------------------+-------+ 
| id | a         | b  | 
+----+-----------------------------------+-------+ 
| 1 | 200 Honolulu Drive Los Angeles CA | 89999 | 
+----+-----------------------------------+-------+ 
1 row in set (0.00 sec) 

:MySQLのコンソールでこれを試してくださいアドレスフィールドの複数の場所)あなたは簡単にあなたのアドレスフィールドを破損する可能性がありますので、私はあなたがSQLではなくコードでそれを行うことをお勧めしたいと思います。

しかし、あなたのために、ピンチでそこにあります。

関連する問題