2016-03-13 29 views
1

我有一個由3列組成的表格,在表格中插入和刪除操作之後,表格中的記錄數總是變化,所以表格中的自動增量ID無法給我一個準確的記錄序列牽強。例如在某個時候,我想根據條件獲取一組記錄(一次一個)。這10條記錄的ID將不會按順序排列。那麼我怎麼能說出這10箇中的第五張呢?從表中依次顯示記錄而不依賴於表的ID?

select @num:[email protected]+1 as id, x, y from test where g=true; 

上面的查詢給我組我需要連續鍵(id)記錄,但我不想一起獲取所有的人,我想他們中的每一個單獨地和順序。

+1

你的問題不是很清楚。 \t請閱讀[**如何提問**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是[** START **]( http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)瞭解如何提高您的問題質量並獲得更好的答案。 –

回答

2

可以使用LIMIT子句從一個序列選擇在特定偏移:

select id, x, y 
    from test 
where g=true 
limit 4, 1; 

注意,有沒有保證結果將是在任何一致的序列,除非你使用ORDER BY。在你的情況下,你可以訂購id

+0

完美!甚至更簡單,並且不會產生新的列。謝謝 – Hussein

1

如果我正確理解你的問題,你可以使用子查詢 - 也應該初始化user defined variable

select * 
from (
    select @num:[email protected]+1 as id, x, y 
    from test cross join (select @num:=0) t 
    where g=true 
    order by test.id 
) y 
where id = 5 

而且,你會想包括order by在你的子查詢 - 大概order by test.id以保證結果的順序。

+0

Yeeh這就是我的意思,但我認爲「限制」使解決方案變得更簡單。 – Hussein

+1

@侯賽因 - 是的,我同意 - 對於這種特殊情況,「限制」更容易。 – sgeddes