我使用以下查询来获取其username
以 97 开头的记录:
select username,id from mdl_user where username regexp '^(97)';
这给了我一堆记录,比如
| 9798432 | 7122 |
| 9798905 | 15490 |
| 9799106 | 15236 |
现在想要获取该id
的username
值并将其复制到另一个字段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在处理正则表达式时很少使用索引。