我们希望能够使用SQL查询选择前N行。目标数据库可以是Oracle或MySQL。有没有一种优雅的方法来解决这个问题?(不用说,我们在这里处理排序后的数据。)
发布于 2009-05-06 11:21:57
要从该表中获得前5名得分者:
CREATE TABLE people
(id int,
name string,
score int)试试下面的SQL:
SELECT id,
name,
score
FROM people p
WHERE (SELECT COUNT(*)
FROM people p2
WHERE p2.score > p.score
) <=4 我相信这在大多数地方都能行得通。
发布于 2009-05-05 13:50:58
不是的。语法是不同的。
但是,您可以创建视图:
/* 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发布于 2009-05-05 13:58:21
我认为这是不可能的,即使是在mysql和mssql之间。不过,我做了一个模拟这种行为的选项:
'PagingHelperID'
SELECT columns FROM viewname WHERE PagingHelperID BETWEEN startindex AND stopindex:
这将使排序变得困难,对于您想要检索数据的每个顺序,您将需要不同的视图。
您也可以在查询时根据数据库动态地“重写”您的sql,并为重写器定义自己的方法,但我不认为有任何“好”方法可以做到这一点。
https://stackoverflow.com/questions/824931
复制相似问题