我們希望能夠使用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. 數據庫不可知的查詢來選擇top 1或前n行?
- 2. PHP不從我的數據庫查詢獲取的所有行
- 3. SQL查詢沒有數據
- 4. SQL查詢從所有數據庫中獲取數據
- 5. 沒有獲取數據與fql查詢
- 6. 有沒有Javascript的數據查詢庫?
- 7. 記錄沒有從SQL查詢中的數據庫中提取
- 8. SQL查詢來獲取具有每seat_count
- 9. 基於主鍵獲取行號的數據庫不可知查詢
- 10. SQL查詢來獲取前行比較時根據其他列
- 11. 數據庫錯誤。 SQL查詢沒有被執行
- 12. 變量沒有從SQl查詢中獲取數據
- 13. oracle sql查詢來獲取沒有空格的列值
- 14. Mysqli查詢沒有獲取數據庫值
- 15. 查詢來獲取數據庫的SQL Server 2005中
- 16. MS SQL查詢來獲取數據強調了前
- 17. 有沒有辦法獲得未知的數據庫查詢的類型/名稱而不執行它?
- 18. 有沒有更好的循環可以編寫來減少數據庫查詢?
- 19. 從數據庫獲取沒有數據
- 20. 有沒有一種Devise方法獲取當前用戶的ID而不查詢數據庫?
- 21. Mysql查詢沒有在opencart中運行,也沒有獲取數據表格數據庫
- 22. SQL查詢獲取數據
- 23. 在數據庫不可知的方式(即沒有Npgsql)查詢C#中的PostgreSQL數據庫
- 24. SQL查詢不獲取所有內容
- 25. 有沒有快速的SQL查詢來刪除重複的行
- 26. SQL查詢所有數據庫
- 27. SQL查詢有關學生數據庫:
- 28. Oracle數據庫sql查詢。有?
- 29. 沒有來自SQL查詢的結果
- 30. 查詢沒有發送到數據庫
由於被迫定購視圖(至少在使用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