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在上一个答案的评论中所说,他需要一个变量字段和表的解决方案。这只是先前答案的缩写,顺便说一下,它的性能较差。