SELECT (@i :=@i + 1)和(SELECT @i := 0)在sql里什么含义

博主在续写代码时,发现xml里一段含不常用函数的sql。查询得知,SELECT (@i :=@i + 1)用于生成自增序列号字段,SELECT @i := 0用于初始化,使每次查询序列号从1开始。文中还给出了相关使用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天接着别人的代码写,发现xml里这样一段sql,里面有不常用的函数:

 <select id="getStringAuditBpm" resultMap="CqProjectAuditBpmVo">
        SELECT
            c.process_node_code,
            c.process_node_name,
            ( @i := @i + 1 ) AS serial_number
        FROM
            ext_act_flow_data a,
            ext_act_process b,
            ext_act_process_node c,
            ( SELECT @i := 0 ) AS itable
        WHERE
            a.form_data_id = #{id}
          AND a.process_key = b.process_key
          AND b.id = c.process_id
        ORDER BY c.id ASC;
    </select>

我查了一下其中 SELECT (@i :=@i + 1) (SELECT @i := 0) 的用法

SELECT (@i :=@i + 1)  是为了生成自增的序列号字段

SELECT @i := 0 是为了将i进行初始化每次查询的序列号都会从1开始进行排序生成序列号

案例:
       1、

SELECT  (@i :=@i + 1) AS i,         d.pkid,d.createTime,d.updateTime,d.date,d.employeeNum         ,d.serviceNum,d.serviceGodNum,d.serviceProjectNum         ,d.totalAmount,d.avgProject,d.avgAmount,d.empForNum

,d.storeId,d.isValid,s.name as storeName

FROM daily d,store s,(SELECT @i := 0) AS it        

WHERE d.isValid=1 and s.pkid=d.storeId    

 

2、

 SELECT
            c.process_node_code,
            c.process_node_name,
            ( @i := @i + 1 ) AS serial_number
        FROM
            ext_act_flow_data a,
            ext_act_process b,
            ext_act_process_node c,
            ( SELECT @i := 0 ) AS itable
        WHERE
            a.form_data_id = #{id}
          AND a.process_key = b.process_key
          AND b.id = c.process_id
        ORDER BY c.id ASC;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值