假设我们有一个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表请求,以便可以获取行数?
...但结果请求
select count(*) from (select * from employees))
不是正确的请求...
您正在将查询用作“表表达式”,但您忘记为其分配alias。试试:
select count(*) from (select * from employees)) x
看到结尾处的x
?
取决于数据库。有时,这样做就足够了:
select count(*)
from (<request>) t;
想到以下问题:
order by
结尾,则某些数据库将不允许它。这些浮现在脑海。对于许多目的,您可以使用子查询或CTE进行封装。