从 sql table 中提取行数

Extracting number of rows from a sql table

假设我们有一个 SQL 请求,例如 select * from employees。如果我只想知道行数,那么可以通过 select count(*) from employees.

来完成

问题是这需要修改 SQL 请求,这可能需要一些解析。如果请求是一个字符串 SQL_request,我想写一些通用的、简单的和健壮的东西,比如:select count(*) from (SQL_request),但是结果请求(即 select count(*) from (select * from employees))不是正确的请求。

需要注意的是,在某些情况下我们可以进行这样的构建。例如。如果想要请求的前 1000 行,那么可以 (SQL_request) limit 1000.

是否有一种方法可以封装通用 SQL table 请求,以便获取行数?

...but the resulting request that is select count(*) from (select * from employees)) is not a correct one...

您正在将查询用作 "table expression",但您忘记为其分配 别名 。尝试:

select count(*) from (select * from employees)) x

看到最后的x了吗?

这取决于数据库。有时,这样做就足够了:

select count(*)
from (<request>) t;

想到以下问题:

  1. 如果 "request" 以 order by 结尾,一些数据库将不允许它。
  2. 如果 "request" 有 CTE,一些数据库将不允许它。
  3. 如果"request"正在为变量赋值,一些数据库将不允许它。

那些浮现在脑海中。对于许多用途,您可以使用子查询或 CTE 进行封装。