从 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;
想到以下问题:
- 如果 "request" 以
order by
结尾,一些数据库将不允许它。
- 如果 "request" 有 CTE,一些数据库将不允许它。
- 如果"request"正在为变量赋值,一些数据库将不允许它。
那些浮现在脑海中。对于许多用途,您可以使用子查询或 CTE 进行封装。
假设我们有一个 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;
想到以下问题:
- 如果 "request" 以
order by
结尾,一些数据库将不允许它。 - 如果 "request" 有 CTE,一些数据库将不允许它。
- 如果"request"正在为变量赋值,一些数据库将不允许它。
那些浮现在脑海中。对于许多用途,您可以使用子查询或 CTE 进行封装。