2011-09-16 45 views
0

所以IHAVE包含地址,城市,州和郵編列的數據庫。問題是地址欄包含地址以及城市,州和郵編。由於這些已經是列,我不希望他們在地址欄中。有沒有辦法從地址欄中動態刪除與城市,州和郵編相匹配的數據?該數據庫有超過50,000行。MySQL的:從欄中刪除文本包含在另一列

+0

你想這樣做是表?你要刪除的條件是什麼?詳細解釋。 –

+0

整個數據庫中地址的格式是否一致? I.E.它總是「地址,城市,州郵編」嗎? – Catfish

+0

你最大的問題在於內容的可變性。如果您的數據與我見過的其他數據庫相似,那麼很可能某些地址包含流氓數據,而其他數據則不包含這些數據,而其他數據包含其中的一部分,但不是全部。另外,它有時可能會以逗號分隔,有時候不會,並且有時地址字段中的數據與單獨的字段不匹配。我的建議是要非常小心你的工作,因爲你提出的建議具有潛在的破壞性。它可能更好地保留它,而不是完全丟失一些數據。 – Spudley

回答

0

可能與REPLACE,但凌亂的事:在MySQL控制檯試試這個:

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) 

如果格式不很規則(或者你有一個發生在郵政編碼,州或城市價值地址字段中有多個地方),您可能很容易損壞您的地址字段,因此我建議您使用代碼而不是SQL來執行此操作。

但它是有你,在緊要關頭。

相關問題