SQL查询前5个结果,不使用LIMIT/ROWNUM/TOP

ene*_*rei 1 mysql sql t-sql oracle postgresql

如何在不使用LIMIT/ROWNUM/TOP的情况下从一组有序结果中选择前5个条目,具体取决于DBMS?

a_h*_*ame 8

标准ANSI SQL解决方案:

SELECT *
FROM ( 
    SELECT col1, 
           col2,
           row_number() over (order by some_col) as rn
    FROM the_table
) t
WHERE rn <= 5
Run Code Online (Sandbox Code Playgroud)

适用于Oracle,PostgreSQL,DB2,SQL Server,Sybase,Teradata和即将推出的Firebird 3.0,但不适用于MySQL,因为它仍然不支持窗口函数.

  • @vmatyi:任何语句*都可以*生成全表扫描.这完全取决于数据量,数据分布和优化器 (2认同)