2012-12-14 121 views
1

非常感謝提前。mySQL從一列中的兩列刪除重複名稱

我在我的表中的兩列:
表:CONTACTINFO
柱:家鄉,MailingAddress

列家鄉和MailingAddress包含重複的(!啊)信息,在家鄉列出的 「城市」 中,MailingAddress列出「1234街,市」

我想刪除MailingAddress城市無論它的家鄉比賽,這樣我可以從去:

籍貫:市
個MailingAddress:1234街,市

籍貫:市
MailingAddress:1234街,

我不想刪除 「」 因爲一些MailingAddress條目有逗號在街道地址信息。

再次感謝你的精彩人物。

回答

2

我這樣做:

UPDATE contactinfo 
SET MailingAddress = replace(MailingAddress, CONCAT(', ', Hometown), ',') 
WHERE MailingAddress LIKE CONCAT('%, ', Hometown) 

這將選擇其中MailingAddress, City結束所有行,只需,取代的, City每一次出現(所以你必須確保, City只發生一次,在字符串的末尾)。

+0

非常棒!非常感謝! – Benshack

0

我不知道你在用什麼腳本,但你需要先獲取匹配的行,然後爲每一行使用腳本中的字符串函數來刪除重複,然後更新相應的行。

查詢你的標準來選擇(如果我理解正確的你):

SELECT * FROM contactinfo WHERE MailingAddress LIKE CONCAT('%', Hometown) 
+1

這當然拉住了所有的記錄。不幸的是,我很難得到一個合適的字符串來執行更改。但是,上面的答案確實奏效。謝謝您的回覆! – Benshack

0

看看MySQL的字符串函數: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

假設您已經查明的違法記錄,應能夠更新新的城市和地址字段(使用臨時字段以免更改源數據)。你可以做這樣的事情:

UPDATE contactinfo 
SET new_MailingAddress = SUBSTRING_INDEX(MailingAddress, ',' 1) 
WHERE id IN [SELECT offending records] 

不是最優雅,但應該給你一個起點。查看所有其他字符串函數以查看哪些最適合您的需求。我相信你也可以爲更多有問題的數據做一些正則表達式。

祝你好運。

+0

我感謝您的幫助!上面的答案效果最好,但我一直在使用字符串函數的鏈接,謝謝! – Benshack

+0

隨時。樂於幫助。 :-) –