我有兴趣学习一些(理想情况下)与数据库无关的选择方法n数据库表中的第行。了解如何使用以下数据库的本机功能来实现这一点也很有趣:
- SQL服务器
- MySQL
- PostgreSQL
- SQLite
- Oracle
我目前正在 SQL Server 2005 中执行以下操作,但我有兴趣了解其他人的更不可知的方法:
WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000
上述 SQL 的功劳:菲罗兹·安萨里的博客
Update: See 特罗尔斯·阿尔文的回答关于 SQL 标准。Troels,你有我们可以引用的链接吗?
标准的可选部分有多种方法可以做到这一点,但许多数据库都支持自己的方式。
一个谈论这个和其他事情的非常好的网站是http://troels.arvin.dk/db/rdbms/#select-limit.
基本上,PostgreSQL和MySQL支持非标准:
SELECT...
LIMIT y OFFSET x
Oracle、DB2 和 MSSQL 支持标准窗口函数:
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
columns
FROM tablename
) AS foo
WHERE rownumber <= n
(我只是从上面链接的网站复制的,因为我从不使用这些数据库)
Update:从 PostgreSQL 8.4 开始,支持标准窗口函数,因此预计第二个示例也适用于 PostgreSQL。
Update:SQLite 在 2018 年 9 月 15 日的 3.25.0 版本中添加了窗口函数支持,因此这两种形式也可以在 SQLite 中使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)