如何编写这样的MySQL语句?

问题描述

|
create table test(
  id ...
  weight ..
);
如何编写这样一条语句,使每条记录的权重至少为先前记录的权重加1?
recordN.weight >=(recordN-1).weight+1
    

解决方法

您需要先检查一下,然后再插入表格,例如您可以使用查询从表中获取最后一行
select weight from test where id = (select MAX(id) from test);
然后从您要插入的值中比较该重量值,然后
if (newWeight >= weight)
{
   //insert here
}
    ,一种方法是将权重存储在变量中,然后在更新语句中使用它
SELECT weight FROM test ORDER BY id DESC LIMIT 1 INTO @weight;
INSERT INTO test (weight) VALUES (@weight+1);
这将获得上一条记录的权重,并在下一条插入语句中使用它(假设您具有自动增量ID)。 您还可以串联查询:
INSERT INTO test (weight) SELECT (weight+1) FROM test ORDER BY id DESC LIMIT 1;
    ,听起来很奇怪。您是要更新现有数据,向表中添加新行还是选择按权重排序的数据? 排序最简单,使用SELECT ... ORDER BY weight; 添加一行,您可以使用上一个答案: INSERT INTO test(weight)(SELECT(SELECT(max(weight)+1)FROM test)); 虽然注意 (1)如果您要查找的是MySQL中的自动递增功能; (2)在好的数据库表中,行顺序无关紧要;可以对行进行排序而不会丢失信息。如果您要依靠行顺序执行任何操作,请再次考虑数据库设计。 最后,如果您要更新数据,增加权重,这是一个常见问题。我总是必须在线查找它,所以我会让你这样做:)     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...