Sql 在select语句中生成rownum,而不使用特定于db的函数

Sql 在select语句中生成rownum,而不使用特定于db的函数,sql,Sql,我想在sql select语句中获取行数,但它不应该是DB特定的查询,就像我不能使用oracle的rownum一样。请告诉我如何实现这一点。 我的表结构如下:pid、emplid、desc作为列,pid和emplid组合将用作主键。因此,在这个用例中建议查询 谢谢, Shyam许多主要的RDBMS都支持row_number函数,但我不相信它在MySQL中,所以它实际上取决于您希望它具有多大的不可知性。如果希望它真正不可知,最好将其移出数据库层 编辑:valex计算rownum的方法可能比将其移出

我想在sql select语句中获取行数,但它不应该是DB特定的查询,就像我不能使用oracle的rownum一样。请告诉我如何实现这一点。
我的表结构如下:pid、emplid、desc作为列,pid和emplid组合将用作主键。因此,在这个用例中建议查询

谢谢, Shyam

许多主要的RDBMS都支持row_number函数,但我不相信它在MySQL中,所以它实际上取决于您希望它具有多大的不可知性。如果希望它真正不可知,最好将其移出数据库层

编辑:valex计算rownum的方法可能比将其移出DB更好。许多主要的RDBMS都支持row_number函数,但我不相信它在MySQL中,所以这取决于您希望它有多不可知。如果希望它真正不可知,最好将其移出数据库层


编辑:valex计算rownum的方法可能比将其移出DB更好。要做到这一点,您的表必须有一个唯一的类似Id的字段——任何东西都可以区分一行和另一行。如果是,则:

select t1.*,
(select count(id) from t as t2 where t2.id<=t1.id) as row_number

from t as t1 order by Id
UPD:如果您有两列要下订单,那么它将如下所示:

select t1.*,
(select count(id) from t as t2 where t2.id1<=t1.id1 and t2.id2<=t1.id2) 
as row_number

from t as t1 order by Id1,id2

要做到这一点,您的表必须有一个唯一的类似Id的字段——任何可以区分一行和另一行的字段。如果是,则:

select t1.*,
(select count(id) from t as t2 where t2.id<=t1.id) as row_number

from t as t1 order by Id
UPD:如果您有两列要下订单,那么它将如下所示:

select t1.*,
(select count(id) from t as t2 where t2.id1<=t1.id1 and t2.id2<=t1.id2) 
as row_number

from t as t1 order by Id1,id2

以数组形式返回结果,然后count$result,但为什么需要这样做呢?这样做很奇怪。行号是标准的ANSI SQL,所以这是独立于DBMS的方式。我的表结构如下:pid、emplid、desc作为列,pid和emplid组合将用作主键。因此,建议在这个用例中进行查询。将结果作为数组返回,然后计算$result,但为什么需要这样做呢?这样做很奇怪。行号是标准的ANSI SQL,所以这是独立于DBMS的方式。我的表结构如下pid、emplid、desc as colums和pid以及emplid组合将用作主键。因此,在此用例中建议查询。valex的解决方案将比使用标准行数慢得多。valex的解决方案将比使用标准行数慢得多。我有两列,这两列将是键的一部分,因此如何重新定义上述查询。@user2392923我为两列添加了一个查询我有两列,这两列将是键的一部分,因此我如何重新定义上面的查询。@user2392923我已经为两列添加了一个查询