2

请我通过从两列中选择两个值到同一表的一列中来插入值。以下是我的查询。

create table table1(
 id int(3) zerofill auto_increment primary key,
 prefix varchar(10) default "AB",
 username varchar(10)
)
engine=innodb;

Mysql插入查询

 insert into table1 (username) 
 select prefix + (LPAD(Coalesce(MAX(id),0) + 1,3, '0'))
  from table1;

上面的插入查询不起作用,它在用户名列中给出空值,请提供任何帮助。谢谢。预期结果如下。

   id    Prefix   username
   001    AB       AB001
   002    AB       AB002
   003    AB       AB003
4

2 回答 2

2

+不是 MySQL 中的字符串连接运算符。如果您正在使用sql_mode=PIPES_AS_CONCAT(或等效),则:

insert into table1 (username) 
select prefix || (LPAD(Coalesce(MAX(id),0) + 1,3, '0'))
from table1;

否则使用CONCAT.

于 2013-08-06T22:54:59.353 回答
1

问题:

  1. 正如马特提到的,你需要CONCAT()在 MySql中使用
  2. 对于插入的第一条记录,您的 SELECT 返回NULL因此您需要使用COALESCE()IFNULL()获取连接的默认值

您的查询应如下所示

INSERT INTO table1 (username)
SELECT CONCAT(COALESCE(prefix, 'AB'), LPAD(COALESCE(MAX(id), 0) + 1, 3, '0'))
  FROM table1

结果:

| 身份证 | 前缀 | 用户名 |
--------------------------
| 1 | AB | AB001 |
| 2 | AB | AB002 |

这是SQLFddle

于 2013-08-06T23:08:29.433 回答