table orders
+----+--------+------------+
|s.no| id | ordername |
+----+--------+------------+
| 1 | 34 | name |
+----+--------+------------+
| 2 | 35 | name |
+----+--------+------------+
| 3 | 36 | name |
+----+--------+------------+
| 4 | 37 | name |
+----+--------+------------+
| 5 | 38 | name |
+----+--------+------------+
写自动生成序列号的查询,当我从sql删除订单时,序列号应该是serial_number行中的1234567,我使用订单ID作为自动增量
答案 0 :(得分:4)
您可以使用sql的大多数方言编写查询:
select row_number() over (order by id) as "s.no",
id, ordername
from orders o
以下是适用于SQL Server的语法:
with toupdate as (
select row_number() over (order by id) as newval,
o.*
from orders o
)
update toupdate set [s.no] = newval;
答案 1 :(得分:1)
对于MYSQL用户 根据您不希望使用用户定义变量的原因,希望避免有2个查询,一个用于初始化,一个用于使用它,您可以使用以下内容:
SELECT @a:=@a+1 serial_number,
marks
FROM student_marks,
(SELECT @a:= 0) AS a;
答案 2 :(得分:0)
select @a:=0;
SELECT @a:=@a+1 serial_number,
marks
FROM student_marks,
它对我有用,希望我也能为你服务。