首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用与数据库无关的SQL查询来获取前N行?

问是否可以使用与数据库无关的SQL查询来获取前N行?
EN

Stack Overflow用户
提问于 2009-05-05 13:49:14
回答 6查看 1.9K关注 0票数 1

我们希望能够使用SQL查询选择前N行。目标数据库可以是Oracle或MySQL。有没有一种优雅的方法来解决这个问题?(不用说,我们在这里处理排序后的数据。)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-05-06 11:21:57

要从该表中获得前5名得分者:

代码语言:javascript
复制
CREATE TABLE people
             (id      int, 
              name    string, 
              score   int)

试试下面的SQL:

代码语言:javascript
复制
SELECT id, 
       name, 
       score
FROM   people  p
WHERE  (SELECT COUNT(*) 
        FROM   people p2
        WHERE  p2.score  > p.score 
       ) <=4 

我相信这在大多数地方都能行得通。

票数 2
EN

Stack Overflow用户

发布于 2009-05-05 13:50:58

不是的。语法是不同的。

但是,您可以创建视图:

代码语言:javascript
复制
/* Oracle */

CREATE VIEW v_table
AS
SELECT  *
FROM    (
        SELECT  *
        FROM    table
        ORDER BY
                column
        )
WHERE   rownum <= n

/* MySQL */

CREATE VIEW v_table
AS
SELECT  *
FROM    table
ORDER BY
        column
LIMIT   n
票数 2
EN

Stack Overflow用户

发布于 2009-05-05 13:58:21

我认为这是不可能的,即使是在mysql和mssql之间。不过,我做了一个模拟这种行为的选项:

'PagingHelperID'

  • write查询创建具有自动递增的int列的视图;例如SELECT columns FROM viewname WHERE PagingHelperID BETWEEN startindex AND stopindex

:

这将使排序变得困难,对于您想要检索数据的每个顺序,您将需要不同的视图。

您也可以在查询时根据数据库动态地“重写”您的sql,并为重写器定义自己的方法,但我不认为有任何“好”方法可以做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/824931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档