自动生成 sql 格式的序列号


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)

希望这对你有用。

最新更新