一. 如何添加序号的方法:
方法1:
Select (@i:=@i+1) as RowNum, A.* from Table1 A,(Select @i:=0) B order by a.id desc limit 0, 10;
方法2:
Set @i:=0;Select (@i:=@i+1) as RowNum, A. from Table1 A order by a.id desc limit 0,10;
以下SQL可在分页中使用:
set @i:=10; select (@i:=@i+1) as RowNum, A. from Table1 A order by a.id desc limit 10,5;
查询结果从第10条开始,取5条(每页5行数据)。序号也从10开始。
以上方法适合在单表查询添加序号RowNum,如果要对复杂的查询或视图添加RowNum,则需先做查询(分组或排序后)结果,然后将查询结果作为子查询的表,再添加行序号。(看二)
二. 对视图查询排序并添加序号
注意:如果是视图或复杂的包含子查询的SQL查询,需先对视图或复杂查询进行查询和排序后,再将查询结果做为表A 添加序号。
如:
Set @i:=X;select (@i:=@i+1) as RowNum, A.* from(Select * from Table1 T where 1=1 order by T.id desc limit X, N) A
或
Select (@i:=@i+1) as RowNum, A.* from (Select @i:=X) B,
(Select * from Table1 T where 1=1 order by T.id desc limit X, N) A
这种方式适合对表、视图和复杂查询结果添加序号,是通用的方式。再分页查询中常用。
三. 在程序中使用带变量的SQL语句
在.net程序中使用带变量的SQL语句时,需要在数据库的连接字符串后面添加“Allow User Variables=True;”。这样就可以实现,SQL语句参数自定义化。
否则会报错“Fatal error encountered during command execution.”
PostgreSQL中的行号
SELECTROW_NUMBER() over(ORDER bY id DESC ) AS rowNum,
id,
vulnerability, application, type, protocol, approval_status, update_time
FROM
plugin_manage a where 1=1
<if test=" vulnerability != null">
and vulnerability like concat('%',#{vulnerability},'%')
</if>
<if test=" application != null">
and application like concat('%',#{application},'%')
</if>
<if test=" type != null">
and type like concat('%',#{type},'%')
</if>
<if test=" protocol != null">
and protocol like concat('%',#{protocol},'%')
</if>