我想遍历整个表,用另一列的值的子字符串填充新创建列的值。
给定一个表结构,如下所示:
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| email | varchar(150) | YES | | NULL | |
| domain | varchar(100) | YES | | NULL | |
+--------+--------------+------+-----+---------+----------------+
其中包含类似的数据:
+----+-------------------------+--------+
| id | email | domain |
+----+-------------------------+--------+
| 1 | bob@domain1.com | NULL |
| 2 | jim@domain1.com | NULL |
| 3 | terry@domain1.com | NULL |
| 4 | frank@anotherdomain.com | NULL |
| 5 | linda@anotherdomain.com | NULL |
| 6 | craig@thethird.com | NULL |
+----+-------------------------+--------+
我想要一个查询来解析电子邮件地址的域部分,并将其放在域列中,最终得到如下结果:
+----+-------------------------+-------------------+
| id | email | domain |
+----+-------------------------+-------------------+
| 1 | bob@domain1.com | domain1.com |
| 2 | jim@domain1.com | domain1.com |
| 3 | terry@domain1.com | domain1.com |
| 4 | frank@anotherdomain.com | anotherdomain.com |
| 5 | linda@anotherdomain.com | anotherdomain.com |
| 6 | craig@thethird.com | thethird.com |
+----+-------------------------+-------------------+
目前,我正在使用 shell 脚本在 MySQL 引擎之外执行此操作,但这效率低下,而且我确信在 MySQL 引擎内部必须有更好的方法来执行此操作。
效率在这里很重要,因为我将在生产中执行此操作的表有数万甚至数十万行。