仅当另一行具有特定值时才更新多个列

时间:2017-01-09 14:34:26

标签: mysql sql-update

我试图清理其中一个表格的某些字段(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.      |              |
+--------+--------------+---------------+--------------+

2 个答案:

答案 0 :(得分:0)

如果只有这两个字段,您可以使用2个简单查询来验证每个字段:

UPDATE profiles
SET address = NULL
WHERE address = phone

UPDATE profiles
SET zip_code = NULL
WHERE zip_code = phone

答案 1 :(得分: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供您参考。

相关问题