簡體   English   中英

SQL Query選擇'Next'記錄(類似於First或Top N)

[英]SQL Query to Select the 'Next' record (similar to First or Top N)

如果某個記錄不存在,我需要進行查詢以返回下一個(或上一個)記錄。 例如,請考慮下表:

ID (primary key)    value
1                    John
3                    Bob
9                    Mike
10                   Tom.

如果7不存在,我想查詢id為7或更大的記錄。

我的問題是,

  1. 這些類型的查詢是否可以使用SQL?
  2. 在DB世界中調用了哪些這樣的查詢?

謝謝!

是的,這是可能的,但實現將取決於您的RDBMS。

這是它在MySQL,PostgreSQL和SQLite中的樣子:

select ID, value
from YourTable
where id >= 7
order by id
limit 1

在MS SQL-Server,Sybase和MS-Access中:

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 myTable where id >=7
order by id

top 1部分的實現是T-SQL(MSSQL / Sybase),其他實現各不相同但總是可行的(mysql / postgre LIMIT 1 ,oracle rownum = 1

select top 1 * from Persons where Id >= @Id order by Id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM