我的表user
具有subid
和name
的复合唯一索引。为了在表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