@rownum mysql的第一行错误

时间:2015-06-13 10:48:22

标签: mysql rownum

我正在尝试为mysql查询生成rownum。 这是我的代码。

select @rownum:=@rownum+1 rowno, (`plgap_nos`.`no_id` - 1) AS `no_id`
from `plgap_nos`,
     (SELECT @rownum:=0) r
limit 0, 10

虽然一切正常但是第一排鞋1621的rownum而不是0。

尝试使用不同的代码,如下所示。仍然存在相同的错误。

select COALESCE(@rownum:=@rownum+1,0) rank,
       (`cnxnifty_plgap_nos`.`no_id` - 1) AS `no_id`
from `money_database`.`cnxnifty_plgap_nos`,
     (SELECT @rownum:=0) r
limit 0, 10

我似乎犯了一些我无法想象的愚蠢错误。 任何人都可以帮忙。

其他信息 - 这是数据的外观 -

排名no_id
1621 0
1个7
2个18
3个21
4个33
5个37
6个45

1 个答案:

答案 0 :(得分:0)

我只是想清楚。以下代码表现出同样的问题?

select (@rn := @rn + 1) as rowno, (p.no_id - 1) AS no_id
from plgap_nos p cross join
     (SELECT @rn := 0) params
order by p.no_id
limit 0, 10;

select中的变量赋值应在 from初始化后执行。我没有看到MySQL以错误的顺序进行初始化(这是你所看到的行为的一个原因)。

我对查询所做的更改(cross join而不是逗号,order by和表别名)不应影响结果集。但是,cross join的作用域语义与,不同,因此cross join最终可能会解决问题的可能性很小。