使用正则表达式匹配更新记录(所有匹配)



我使用以下查询来获取其username以 97 开头的记录:

select username,id from mdl_user where username regexp '^(97)';

这给了我一堆记录,比如

| 9798432                                     |  7122 |
| 9798905                                     | 15490 |
| 9799106                                     | 15236 |

现在想要获取该idusername值并将其复制到另一个字段idnumber,对于同一id,如果idnumber为零,则为它找到的所有id。我的想法是:

UPDATE mdl_user 
SET idnumber = (SELECT username FROM mdl_user WHERE id=(SELECT id FROM mdl_user WHERE username REGEXP '^(97)') 
AND idnumber=0

我不确定该单个查询是否适用于所有匹配项。 有什么帮助吗?

你不需要子查询。将WHERE子句放在UPDATE查询中。然后,它将从同一行复制该列。

UPDATE mdl_user
SET idnumber = username
WHERE username REGEXP '^97'
AND idnumber = 0

顺便说一句,如果username LIKE '97%'被索引,它可能会更有效率;我不认为MySQL在处理正则表达式时很少使用索引。

最新更新