sql - SELECT TOP 1 的 ANSI SQL 版本

标签 sql sql-server ansi-sql

SQL SERVER 的 SELECT TOP n 是否有符合 ANSI SQL 的版本?

最佳答案

ANSI/ISO SQL:2003 引入了窗口函数:

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY age ASC) AS rownum,
    person_id,
    person_name,
    age
  FROM person
) AS foo
WHERE rownum <= 3

Microsoft SQL Server 2005 及更高版本支持此语法。 http://msdn.microsoft.com/en-us/library/ms189798(v=sql.90).aspx

ANSI/ISO SQL:2008 引入了更简单的 FETCH FIRST 语法,这可能更类似于 Microsoft/Sybase TOP 语法:

SELECT person_id, person_name, age FROM person
FETCH FIRST 3 ROWS ONLY

Microsoft SQL Server 2012 及更高版本支持此语法。 https://learn.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-2017#using-offset-and-fetch-to-limit-the-rows-returned

如果您仍在使用 Microsoft SQL Server 2000,您应该阅读我不久前发布的有关执行“分页”样式查询的问题: Emulate MySQL LIMIT clause in Microsoft SQL Server 2000

关于sql - SELECT TOP 1 的 ANSI SQL 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14804325/

相关文章:

python - 使用Python将dbf转换为sqlite不会填充表

mysql - 获取表中唯一值计数的语句是什么?

sql - 如何计算运行乘法

sql - 如何使用sql server 2008从变量中选择顶行?

c# - SqlBulkCopy 中的错误处理

sql-server - 哪种连接语法更好?

mysql - 为多对多表添加默认配置

MySQL 将行转为动态数量的列

sql - 选择任何FROM系统

mysql - 通过参数化插入语句从 VB.net 发送到 Mysql 数据库的数据错误