我的表user具有subidname的复合唯一索引。为了在表user中插入新行,我必须确保name不存在,否则subid必须增加1。我倾向于使用两个查询来解决此问题。

DB.query("SELECT subid FROM user WHERE name='"+name+"' ORDER BY subid DESC LIMIT 1",function(er,rows){
    if(er){
        throw er;
    }
    var row = rows[0];
    var subid = row ? row.subid+1 : 0;
    DB.query("INSERT INTO user(name,subid) VALUES('"+name+"','"+subid+"')",function(er){
        if(er){
            throw er;
        }
    });
});


如何在单个查询中获得相同的结果?

最佳答案

尝试作为:

  insert into userT
  select 'bbb', coalesce(max(subid),0)+1 from userT where name = 'bbb';


'bbb'替换为程序的name值。

这是一个用来显示其工作原理的小提琴:http://sqlfiddle.com/#!9/689db1/1

10-08 04:38