2017-01-09 26 views
1

我試圖清理某個表的某些字段(profiles),某些列的值爲電話號碼。只有在另一行有一定的值時才更新多個列表

+--------+--------------+---------------+--------------+ 
| id  |  phone | address | zip_code | 
+--------+--------------+---------------+--------------+ 
|  1 | 1234567890 | 1234567890 |  45455 | 
|  2 | 7777888800 | 56 st.  | 7777888800 | 
+--------+--------------+---------------+--------------+ 

我怎樣才能更新所有的值等於手機領域的領域,並清理它們如下?

+--------+--------------+---------------+--------------+ 
| id  |  phone | address | zip_code | 
+--------+--------------+---------------+--------------+ 
|  1 | 1234567890 |    |  45455 | 
|  2 | 7777888800 | 56 st.  |    | 
+--------+--------------+---------------+--------------+ 
+0

如果這是一個一次性的練習,只有有限的幾個字段,我會爲每個要清理的字段編寫單獨的查詢。 – Shadow

回答

0

如果只有這兩個領域,你可以用2個即驗證每場簡單的查詢做到這一點:

UPDATE profiles 
SET address = NULL 
WHERE address = phone 

UPDATE profiles 
SET zip_code = NULL 
WHERE zip_code = phone 
+0

如果我有更多的領域,如8左右,我也有很多配置文件,任何想法? – greenbandit

+0

對mysql沒有多少經驗,但可能有類似的東西。在Oracle中,我將使用[PL/SQL](https://en.wikipedia.org/wiki/PL/SQL),使用表格的元數據,您可以遍歷所有列並將其與手機進行比較。 –

0

您可以使用case語句像下面

update profile2 p 
set 
p.address = case when cast(p.phone as char(20)) = p.address then null else p.address end, 
p.zipcode = case when p.phone = p.zipcode then null else p.zipcode end, 
p.fax = case when p.phone = p.fax then null else p.fax end; 
所有列只需更新

我還包括一列fax供您參考。

+0

正如PO在前面的回答評論中所說的那樣,他需要一個可變字段和表格的解決方案。這只是以前答案的縮寫,順便說一下,它的性能較差。 –

相關問題