通过从两列中选择同一个表中的列来插入

时间:2013-08-06 22:48:22

标签: mysql sql

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

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;

上面的插入查询不起作用,它在用户名栏中给出了null,请任何帮助表示赞赏。谢谢。 预期结果如下。

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

2 个答案:

答案 0 :(得分:2)

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

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

否则使用CONCAT

答案 1 :(得分:1)

问题:

  1. 正如Matt所说,你需要在MySql中使用CONCAT()
  2. 对于插入的第一条记录,您的SELECT返回NULL,因此您需要使用COALESCE()IFNULL()来获取连接的DEFAULT值
  3. 您的查询应如下所示

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

    结果:

    | ID | PREFIX | USERNAME |
    --------------------------
    |  1 |     AB |    AB001 |
    |  2 |     AB |    AB002 |
    

    这是 SQLFddle