分类: Mysql/postgreSQL
2009-05-16 18:38:21
如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号,ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数。 Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的 ROWNUM ; MS SQL Server 则在 2005 版本中提供了 ROW_NUMBER() 函数;但在 MySQL 中似乎还没有这样的系统自带功能。
解决方法是通过预定义用户变量来实现:
mysql> set @mycnt = 0;
mysql> select (@mycnt := @mycnt + 1) as ROWNUM , NAME from CHARBASE LIMIT 100;
这样查询出来的结果集中 ROWNUM 就保存了行编号信息。这个行编号信息的某种用途在于当你需要根据需要对数据按照某种规则排序并取出排序之后的某一行数据,并且希望知道这行数据在之前排序中的位置时就用得着了。
为了方便,我们通常将两句合起来执行,以避免变量全局自增:
mysql> set @mycnt = 0; select (@mycnt := @mycnt + 1) as ROWNUM , NAME from CHARBASE LIMIT 100;
当然,我们也可以通过创建临时表的方法把查询结果写到某个拥有 auto_increment 字段的临时表中再做查询。