![]() |
1
9
要获得有意义的行号,您需要对结果进行排序。然后你可以这样做:
注意,子查询的WHERE子句需要与主查询的WHERE子句或主键匹配 和 主查询的排序依据。 SQL Server在构造上有行数()来简化这一点,但我不知道MySQL是否有什么特殊的解决方法。 因为我在这里的帖子被接受为答案,所以我还想引用Dan Goldstein的回答,这在方法上非常相似,但使用联接而不是子查询,通常会表现得更好 |
![]() |
2
9
哎呀,没有“标准”的方法。
在MySQL中实现这一点的最简单方法是
http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/ |
![]() |
3
8
一个效率很低但却是ANSI SQL的想法是,使用与相同条件匹配的较小id来计算行数。我还没有测试过此SQL,它可能不会工作,但类似于:
|
![]() |
4
2
据我所知,没有一种ANSI标准方法可以做到这一点。 在SQL Server中有一个可以使用的ROW_NUMBER()函数,在Oracle中有一个ROWNUM伪列。 在MySQL中,有 this technique |
![]() |
5
2
|
![]() |
6
2
在oracle中,我所知道的唯一一个数据库就是对数据进行子选择 即
基本概念是rownum将根据从内部select返回的结果集进行计算。
|
![]() |
7
2
|
![]() |
8
1
我知道这是一条老线索,但我刚才在寻找这个答案。我在MySQL中尝试了Dan Goldstein的查询,但由于“outer”是一个保留字,所以它没有按编写的那样工作。然后,我注意到它仍然在使用子查询。
这在MySQL 5.1中对我很有效。对于MySQL,按p2.id分组似乎就足够了。可以将p2.id的显式ORDER添加到查询的末尾,但无论采用哪种方式,我都得到了相同的结果。 |
![]() |
9
0
这个问题的最新答案,但我相信窗口函数现在是ANSI SQL的标准,或者至少是最新的SQL风格。因此,请使用ROW_NUMBER()函数。
|
![]() |
Community wiki · SQL语法新手 1 年前 |
![]() |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |