如果某個記錄不存在,我需要執行查詢以返回下一個(或前一個)記錄。例如,考慮下表:SQL查詢選擇'下一個'記錄(類似於第一個或前N)
ID (primary key) value
1 John
3 Bob
9 Mike
10 Tom.
我想查詢ID爲7或更大,如果7不存在的記錄。
我的問題是,
- 難道這些類型的查詢可能與SQL?
- 什麼是DB世界中調用的這種查詢?
謝謝!
如果某個記錄不存在,我需要執行查詢以返回下一個(或前一個)記錄。例如,考慮下表:SQL查詢選擇'下一個'記錄(類似於第一個或前N)
ID (primary key) value
1 John
3 Bob
9 Mike
10 Tom.
我想查詢ID爲7或更大,如果7不存在的記錄。
我的問題是,
謝謝!
是的,這是可能的,但實施將取決於你的RDBMS。
下面是它看起來像在MySQL,PostgreSQL和SQLite的:
select ID, value
from YourTable
where id >= 7
order by id
limit 1
在MS SQL-Server中,Sybase和MS-訪問:
select top 1 ID, value
from YourTable
where id >= 7
order by id
在Oracle:
select * from (
select ID, value
from YourTable
where id >= 7
order by id
)
where rownum = 1
在Firebird和Informix中:
select first 1 ID, value
from YourTable
where id >= 7
order by id
在DB/2(此語法是SQL-2008標準):
select id, value
from YourTable
where id >= 7
order by id
fetch first 1 rows only
在那些具有 「窗口」 的功能RDBMS(在SQL-2003標準):
select ID, Value
from (
select
ROW_NUMBER() OVER (ORDER BY id) as rownumber,
Id, Value
from YourTable
where id >= 7
) as tmp --- remove the "as" for Oracle
where rownumber = 1
和RDBMS,如果你不知道你有:
select ID, value
from YourTable
where id =
(select min(id)
from YourTable
where id >= 7
)
嘗試此MS-SQL:
SELECT TOP 1
id, value
FROM your_table
WHERE id >= 7
ORDER BY id
或MySQL的
SELECT id, value
FROM your_table
WHERE id >= 7
ORDER BY id
LIMIT 0,1
select top 1 * from Persons where Id >= @Id order by Id
我只想做這樣的:
select top 1 * from myTable where id >=7
order by id
實施top 1
部分的是T-SQL(MSSQL /的Sybase),其他實現有所不同,但它始終是可能的(MySQL的/ postgre LIMIT 1
,甲骨文rownum = 1
)
你的意思是查詢只'9返回Mike',如果你搜索'7'? –