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

4

3 回答 3

5

您可以用大多数 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;
于 2013-05-25T14:56:39.693 回答
1

对于MYSQL 用户 ,根据您不想使用用户定义变量的原因,希望避免有 2 个查询,一个用于初始化,一个用于使用它,您可以使用以下内容:

SELECT  @a:=@a+1 serial_number, 
        marks 
FROM    student_marks,
        (SELECT @a:= 0) AS a;
于 2014-11-26T07:34:01.167 回答
0
select @a:=0;
SELECT  @a:=@a+1 serial_number,
    marks 
FROM      student_marks,

它对我有用,希望我也对你有用。

于 2017-02-23T06:16:31.880 回答