0

現在のエントリの ID を知っていて、テーブルが ID 順に並べられていると仮定して、SQL データベースの次の行のデータを取得する方法を考えていました。

通常、ID で並べ替える場合、前/次のエントリを取得するには、ID を保持する変数に 1 を減算/追加し、新しい ID で SELECT クエリを実行するだけでよいと考えられますが、これは次の場合に問題を引き起こします。テーブルには穴があり、ID は次のようになります。

13,14,18,21...

等々。

それを行う方法は、プログラミング言語でループし、クエリを実行し、行が見つかるまで実行するたびに 1 を追加することですが、データベースに負担をかける可能性があります。単一のクエリでそれを見つける方法はありますか?

4

3 に答える 3

2

これはどう:

Select MIN(myTable.Id) FROM myTable WHERE myTable.Id > 27

于 2013-05-21T23:30:02.683 に答える
2

ちょっと考えただけでも、これはもっともらしい問題だと思っていました。だから私はここで私の解決策を共有することを考えました!

これを解決するために私がすることは、次のように、新しい ID が古い ID よりも小さい/大きい新しいクエリを作成することです。

SELECT *
FROM myTable t
WHERE t.id > 27
ORDER BY t.id
LIMIT 1

これを実行し、結果を 1 に制限することで、27 の後に来るエントリを確実に取得できます。

これは、日付順でも機能するはずです。

于 2013-05-21T23:26:17.640 に答える
0

min() で次の ID 番号を取得します。たとえば、21 の後の次の ID は、このクエリによって指定されます。

select min(test_id) as next_test_id
from test
where test_id > 21

それを元のテーブルに結合して、その ID 番号の行を取得します。

select *
from test
inner join (select min(test_id) as next_test_id
            from test
            where test_id > 3 ) t2
        on test.test_id = t2.next_test_id
于 2013-05-22T00:03:49.603 に答える