我想觸發查詢「SELECT * FROM TABLE
」,但僅從行N+1
中選擇。任何想法如何做到這一點?如何跳過sql查詢中的前n行
回答
查詢:在sql-server
declare @N int= 5 --Any random number
SELECT * FROM (
SELECT ROW_NUMBER()OVER(ORDER BY ID)AS ID
,ID
FROM TABLE_NAME
)AS tbl
WHERE ID >= @N + 1
ORDER BY tbl.ID
這會給表,其中ID
從@N + 1
開始的行。
我不同意這個答案,這不符合你的想法。 使用此解決方案,您不會跳過N行,將N行放入ID> = N –
注意*此答案僅適用於您的ID是按順序排列並且從未從此表中刪除過任何一行的情況。 –
SQL服務器:
select * from table
except
select top N * from table
甲骨文:
select * from table
minus
select * from table where rownum <= N
with TableWithNum as (
select t.*, rownum as Num
from Table t
)
select * from TableWithNum where Num > N
他們可能會滿足您的需求更多或更少。
有沒有直接的方式來做你想要的SQL。 但是,在我看來,這不是一個設計缺陷。
不應該像這樣使用SQL。
在關係數據庫中,表格表示一個關係,它是一個定義的集合。一個集合包含無序元素。
另外,不依賴記錄的物理順序。行順序不受RDBMS保證。
如果記錄的排序很重要,最好在表中添加一個如'Num'的列,然後使用以下查詢。這更自然。
select *
from Table
where Num > N
order by Num
ANSI SQL:「select * from tablename OFFSET n」,在這種情況下,建議使用ORDER BY。 – jarlh
(a)是,很好答案。看到我對這個問題的評論。 (b)在你的最後一句話中,你不需要*添加*一列,只需要'ORDER BY ...'任何一列,以獲得你需要的結果。 (c)將'ORDER BY'大寫。' – PerformanceDBA
什麼:
SELECT * FROM table LIMIT 50 OFFSET 1
請注意,這不適用於所有類型的SQL,因爲'LIMIT'和'OFFSET'關鍵字不是ANSI標準的一部分(參見[這個問題](http://stackoverflow.com/q/1528604/) 168775))。 – eykanal
你想要的東西,就像在LINQ跳過5,並採取10?
SELECT TOP(10) *
FROM MY_TABLE
WHERE ID not in (SELECT TOP(5) ID From My_TABLE);
使用此:
SELECT *
FROM Sales.SalesOrderHeader
ORDER BY OrderDate
OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
注意:此查詢僅適用於SQL Server 2012及更高版本 –
對於SQL2012和更高版本,最好的方法是@ MajidBasirati的答案。
我也喜歡@ CarlosToledo的答案,它不限於任何SQL Server版本,但它缺少Order By Clauses。沒有它們,它可能會返回錯誤的結果。
對於SQL 2008和更高版本,我會使用Common Table Expressions來獲得更好的性能。
-- This example omits first 10 records and select next 5 records
;WITH MyCTE(Id) as
(
SELECT TOP (10) Id
FROM MY_TABLE
ORDER BY Id
)
SELECT TOP (5) *
FROM MY_TABLE
INNER JOIN MyCTE ON (MyCTE.Id <> MY_TABLE.Id)
ORDER BY Id
爲了在SQL Server中執行此操作,您必須按列排序查詢,以便您可以指定所需的行。
例子:
select * from table order by [some_column]
offset 10 rows
FETCH NEXT 10 rows only
這適用於所有DBRM/SQL,它是標準的ANSI:
SELECT *
FROM owner.tablename A
WHERE condition
AND n+1 <= (
SELECT COUNT(DISTINCT b.column_order)
FROM owner.tablename B
WHERE condition
AND b.column_order>a.column_order
)
ORDER BY a.column_order DESC
上面的編碼select語句跳過column_order中值較大的前n行。您可以根據需要更改條件以檢索較小的條目。 – fspino
我知道這是比較晚,現在來回答查詢。但我有一些不同的解決方案,我認爲它有更好的性能,因爲在SQL查詢中沒有執行比較,只有排序完成。當SKIP的值足夠大時,您可以看到其性能大幅提升。
性能最佳但只爲的SQL Server 2012及以上。原來從@Majid Basirati's answer這是值得一提的。
DECLARE @Skip INT = 2, @Take INT = 2 SELECT * FROM TABLE_NAME ORDER BY ID ASC OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
不如第一個但SQL Server 2005和以上兼容。
DECLARE @Skip INT = 2, @Take INT = 2 SELECT * FROM ( SELECT TOP (@Take) * FROM ( SELECT TOP (@Take + @Skip) * FROM TABLE_NAME ORDER BY ID ASC ) T1 ORDER BY ID DESC ) T2 ORDER BY ID ASC
在Faircom SQL(這是一個僞MySQL的),我可以做到這一點的一個超級簡單的SQL語句,就像如下:
SELECT SKIP 10 * FROM TABLE ORDER BY Id
顯然,只需更換10
與你想要的任何聲明變量。
我沒有訪問MS SQL或其他平臺,但我會很驚訝MS SQL不支持這樣的事情。
試試下面的查詢它的工作
SELECT * FROM `my_table` WHERE id != (SELECT id From my_table LIMIT 1)
希望這將有助於
- 1. 如何在mysql查詢中跳過行
- 2. 庫MySQLi查詢跳過前5行
- 3. 如何有效地跳過python文件中的前n行?
- 4. 跳過在SQL Server中的子查詢
- 5. 跳過JQuery中的前N個元素
- 6. 如何執行SQL查詢跳過錯誤?
- 7. SQL查詢知道跳過的數字
- 8. 前N個查詢 - SQL Server 2008
- 9. SQL Server中ID更改後跳過第一行的查詢
- 10. uniq的跳過前N個字符/場
- 11. unix split跳過第n行
- 12. 查詢在SQL SERVER跳過布爾
- 13. 如何查看文件的前n行?
- 14. 在sed中使用正則表達式時跳過前n行?
- 15. 如何在Elasticsearch中生成查詢並跳過部分查詢?
- 16. Kotlin序列「跳過」前N個條目
- 17. 複製文件跳過前n行和後m行
- 18. ASP.NET SQL Server選擇前N個值,但跳過M結果
- 19. 如何使用SQL查詢中的查詢進行查詢
- 20. gnuplot的 - 跳過前兩行
- 21. 如何選擇層次查詢中的前N個元素(Oracle SQL)
- 22. 如何過濾sql查詢
- 23. 如何獲取SQL Server 2000查詢中的當前行號?
- 24. Android:執行查詢錯誤(跳過*幀)
- 25. 如何編寫檢查前一行的SQL查詢?
- 26. 如何從WebMatrix中的sql查詢中跳出&符號?
- 27. 目前在SQL Server中運行查詢
- 28. 如何從T-SQL中的表中選擇前N行?
- 29. 通過查詢刪除SQL中的行
- 30. 如何使用SQL查詢加載第n到第m行?
是否使用的是RDBMS(f.e。甲骨文,MySQL或SQL服務器)? –
哪個dbms? 「OFFSET n」是ANSI SQL,但許多dbms產品都以自己的方式來完成這項工作,例如。 LIMIT,TOP ... – jarlh
此外,如果您想在給定的行號範圍內查找行,則可以使用['ROW_NUMBER']之類的函數(https://msdn.microsoft.com/zh-cn/library/ms186734的.aspx)。但這真的取決於你的dbms。 –