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作为自动增量
你可以用大多数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;
适用于 MYSQL 用户根据您不想使用用户定义变量的原因,希望避免有 2 个查询,一个用于初始化,一个用于使用它,您可以使用以下内容:
SELECT @a:=@a+1 serial_number,
marks
FROM student_marks,
(SELECT @a:= 0) AS a;
select @a:=0;
SELECT @a:=@a+1 serial_number,
marks
FROM student_marks,
它对我有用,希望我也对你有用。
尝试使用以下查询,它为您提供没有任何分区的序列号。我正在使用 MSSQL 服务器生成序列号。
Select row_number() over( order by (select null)) [serialno],
id,
ordername
from orders With(nolock)
希望这对你有用。