【发布时间】:2010-08-02 16:33:53
【问题描述】:
能否请您指导我在 Oracle 中与此查询等效:
SELECT SQL_CALC_FOUND_ROWS * FROM tableName
SELECT FOUND_ROWS() as cnt
谢谢
【问题讨论】:
能否请您指导我在 Oracle 中与此查询等效:
SELECT SQL_CALC_FOUND_ROWS * FROM tableName
SELECT FOUND_ROWS() as cnt
谢谢
【问题讨论】:
对于 Oracle 9i+,使用:
SELECT COUNT(*) over () found_rows,
t.*
FROM TABLE t
Be aware that it is faster to run separate queries than to use SQL_CALC_ROUND_ROWS in MySQL.
【讨论】:
OVER是一个分析函数,直到9i才支持Oracle。
查询从tableName 中检索所有行,然后检索tableName 中的行数。使用SQL_CALC_FOUND_ROWS 这样做只是一种性能优化:它使您免于执行两个查询。
如果性能不是问题,Oracle 的等价物是:
SELECT * FROM tableName
SELECT count(*) from tableName
如果您有能力重写客户端,您可以在一个查询中完成这两项工作:
SELECT *
, (SELECT count(*) from tableName) as totalRows
FROM tableName
【讨论】:
select a.*, count(*) over () as total_rows from [table_name] a;