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

Mysql 仅当另一行具有特定值时更新多个列,mysql,sql-update,Mysql,Sql Update,我正在尝试清理我的一个表(profiles)的一些字段,有些列的值是电话号码 +--------+--------------+---------------+--------------+ | id | phone | address | zip_code | +--------+--------------+---------------+--------------+ | 1 | 1234567890 | 1234567890

我正在尝试清理我的一个表(
profiles
)的一些字段,有些列的值是电话号码

+--------+--------------+---------------+--------------+
| id     |     phone    |    address    |  zip_code    |
+--------+--------------+---------------+--------------+
|      1 |  1234567890  |   1234567890  |     45455    |
|      2 |  7777888800  |   56 st.      |  7777888800  |
+--------+--------------+---------------+--------------+
如何更新值等于phone字段的所有字段,并按如下方式清理它们

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

如果仅显示这两个字段,则可以通过两个简单的查询来验证每个字段:

UPDATE profiles
SET address = NULL
WHERE address = phone

UPDATE profiles
SET zip_code = NULL
WHERE zip_code = phone

如果仅显示这两个字段,则可以通过两个简单的查询来验证每个字段:

UPDATE profiles
SET address = NULL
WHERE address = phone

UPDATE profiles
SET zip_code = NULL
WHERE zip_code = phone

您只需使用下面的
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
供您参考。

您只需使用下面的
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;

我还增加了一列
传真
,供您参考。

如果这是一个字段数量有限的一次性练习,我会为每个要清理的字段编写单独的查询。如果这是一个字段数量有限的一次性练习,我会为每个要清理的字段编写单独的查询。如果我有更多的字段,比如8个左右,我也有很多配置文件,你知道吗?我对mysql没有太多经验,但可能有类似的地方。在Oracle中,我会使用表的元数据,你可以迭代所有列,并将它们与phone进行比较。如果我有更多字段,比如8个左右,我也有很多配置文件,你知道吗?我对mysql没有太多经验,但可能有类似的内容。在Oracle中,我会使用表的元数据,您可以迭代所有列,并将它们与phone进行比较。正如PO在前面的回答中所说,他需要一个变量字段和表的解决方案。这只是上一个答案的缩写,顺便说一下,它的性能较差。正如PO在上一个答案的评论中所说,他需要一个变量字段和表的解决方案。这只是先前答案的缩写,顺便说一下,它的性能较差。