选择结果的mysql concat

时间:2013-01-25 14:08:43

标签: mysql

我想在字段username中使用自动命名在MySQL中插入数据,但我该怎么办呢?
目前的数据是:

+----+----------+
| id | username |
+----+----------+
|  1 | admin1   |
|  2 | admin2   |
+----+----------+

我尝试使用这个sql但它不能:

INSERT INTO `tbl_user` (
`username`
)
VALUES (
CONCAT('admin',(SELECT MAX(SUBSTRING_INDEX(`username`,'admin',-1))+1 FROM `tbl_user`))
);

并收到错误消息#1093 - You can't specify target table 'tbl_user' for update in FROM clause

我想要的最终结果是:

+----+----------+
| id | username |
+----+----------+
|  1 | admin1   |
|  2 | admin2   |
|  6 | admin3   |
|  9 | admin4   |
+----+----------+

可能吗?感谢。

2 个答案:

答案 0 :(得分:6)

您可以使用在插入后更新列用户名的触发器。以下是有关如何实际执行此操作的更多信息:http://www.roseindia.net/sql/trigger/mysql-trigger-after-insert.shtml

修改

我忘了MySQL不允许你从同一个表上声明的触发器更新表。

然而,这应该做你想做的事情:

SET @id := (SELECT id FROM YOUR_TABLE ORDER BY id DESC LIMIT 1);
INSERT INTO YOUR_TABLE (username) VALUES(
   CONCAT("ADMIN", @id + 1)
);

答案 1 :(得分:1)

查询:

<强> SQLFIDDLEExample

INSERT INTO `tbl_user` (
`username`
)
VALUES (
CONCAT('admin',(SELECT MAX(CAST(REPLACE(`username`,'admin','') AS SIGNED INTEGER))+1 
                FROM (SELECT * FROM tbl_user) t))
);

结果:

|     ID | USERNAME |
---------------------
|      1 |   admin1 |
|      2 |   admin2 |
| (null) |   admin3 |