我们希望能够使用SQL查询选择前N行。目标数据库可以是Oracle或MySQL。有没有一个优雅的方法呢? (不用说,我们正在处理这里的排序数据。)有没有数据库不可知的SQL查询来获取前N行?
0
A
回答
2
要想从该表中的前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
我认为这应该工作在大多数地方。
2
否。语法不同。
你可以,但是,创建视图:
/* 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
1
我不认为这是可能的,即使只是MySQL和MSSQL之间。我做了一个模拟此类行为的选项:
- 创建具有自动递增int列的视图;说“PagingHelperID”
- 喜欢写查询:
SELECT columns FROM viewname WHERE PagingHelperID BETWEEN startindex AND stopindex
这将使订货困难,你将需要为每个在你打算中检索数据的顺序不同的看法。
根据数据库查询时,您也可以随时“重写”您的sql,并为重写器定义自己的方法,但我认为没有任何“好”的方法来执行此操作。
1
如果桌子上有一个独特的密钥......
Select * From Table O
Where (Select Count(*) From Table I
Where [UniqueKeyValue] < O.UniqueKeyValue) < N
您可以用自己的标准,如果你想在“顶部”的定义是基于一些其他的逻辑不是唯一的关键...
编辑:如果定义“顶部”的含义的“排序”是基于一个非唯一的列或一组列,那么你仍然可以使用这个,但你不能保证你将能够得到正好N个记录...
Select * From Table O
Where (Select Count(*) From Table I
Where nonUniqueCol < O.nonUniqueCol) < 10
如果记录8,9,10,11和12在[nonUniqueCol]中都具有相同的值,那么查询将只生成7条记录('<')...或12(如果使用“< =”)
注:由于这涉及到相关子查询时,性能可以是非常大的表的问题...
0
我觉得每一个产品如下不同的语法来实现这一目标。请在下面找到类似的问题。 Is there an ANSI SQL alternative to the MYSQL LIMIT keyword?
0
在看完这个以后,最大的问题是MySQL不符合ISO SQL:2003标准。如果是,你有这些方便的窗函数:
SELECT * from
( SELECT
RANK() OVER (ORDER BY <blah>) AS ranking,
<rest of columns here>,
FROM <table>
)
WHERE ranking <= <N>
唉,MySQL的(和其他人模仿它的行为,如SQLite的),不这样做,因此,整个限制问题。
退房维基百科这个片段(http://en.wikipedia.org/wiki/Window_function_(SQL)#Limiting_result_rows)
相关问题
- 1. SQL查询没有数据
- 2. SQL查询从所有数据库中获取数据
- 3. 没有获取数据与fql查询
- 4. 有没有Javascript的数据查询库?
- 5. 记录没有从SQL查询中的数据库中提取
- 6. SQL查询来获取具有每seat_count
- 7. 基于主键获取行号的数据库不可知查询
- 8. 变量没有从SQl查询中获取数据
- 9. 查询来获取数据库的SQL Server 2005中
- 10. MS SQL查询来获取数据强调了前
- 11. 有没有办法获得未知的数据库查询的类型/名称而不执行它?
- 12. 有没有更好的循环可以编写来减少数据库查询?
- 13. 从数据库获取没有数据
- 14. 有没有一种Devise方法获取当前用户的ID而不查询数据库?
- 15. Mysql查询没有在opencart中运行,也没有获取数据表格数据库
- 16. 在数据库不可知的方式(即没有Npgsql)查询C#中的PostgreSQL数据库
- 17. SQL查询不获取所有内容
- 18. SQL查询有关学生数据库:
- 19. 没有来自SQL查询的结果
- 20. 查询没有发送到数据库
- 21. 查询所有当前数据库和用户名的SQL Server查询
- 22. 来自oracle数据库的sql查询
- 23. 没有服务器端脚本的Sql数据库查询
- 24. 没有UNION的库存SQL查询?
- 25. 有效的查询来获取行的数据,数量和总数。 (atm 32 queries)
- 26. 数据库查询发现项目没有以前
- 27. 有没有什么有效的方法来加快Android数据库查询?
- 28. SQL查询来获取所有用户不在组
- 29. SQL查询来获取最
- 30. Psycopg2没有获取数据库中存在的所有数据
由于被迫定购视图(至少在使用TOP n子句的SQL服务器上)的限制。 – Tomalak 2009-05-05 13:52:40
和其他DBMS支持这个概念,但使用其他符号。 – 2009-05-05 13:59:30
另外,某些DBMS不允许在视图中使用ORDER BY子句。 – 2009-05-05 14:00:07