在sql中自动生成序列号

时间:2013-05-25 14:43:22

标签: sql serial-number

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作为自动增量

3 个答案:

答案 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,

它对我有用,希望我也能为你服务。