Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL在单个查询中从已知ID获取下一个条目_Sql - Fatal编程技术网

SQL在单个查询中从已知ID获取下一个条目

SQL在单个查询中从已知ID获取下一个条目,sql,Sql,我想知道,假设我知道当前条目的ID,并且表是按ID排序的,如何获取SQL数据库中下一行的数据 通常,当按ID排序时,人们会认为要获得上一个/下一个条目,只需在保存ID的变量中减去/添加1,然后使用新ID运行SELECT查询,但如果表中有洞,则会出现问题,ID如下: 13,14,18,21 等等 一种方法是在编程语言中循环,运行查询并在每次运行时添加1,直到找到一行,但这可能会对数据库造成负担。有没有一种方法可以在一个查询中找到它?我认为这是一个合理的问题,我甚至想了一下。所以我想在这里分享我的解

我想知道,假设我知道当前条目的ID,并且表是按ID排序的,如何获取SQL数据库中下一行的数据

通常,当按ID排序时,人们会认为要获得上一个/下一个条目,只需在保存ID的变量中减去/添加1,然后使用新ID运行SELECT查询,但如果表中有洞,则会出现问题,ID如下:

13,14,18,21

等等


一种方法是在编程语言中循环,运行查询并在每次运行时添加1,直到找到一行,但这可能会对数据库造成负担。有没有一种方法可以在一个查询中找到它?

我认为这是一个合理的问题,我甚至想了一下。所以我想在这里分享我的解决方案

要解决这个问题,我要做的是创建一个新查询,其中新id小于/大于旧id,如下所示:

SELECT *
FROM myTable t
WHERE t.id > 27
ORDER BY t.id
LIMIT 1
通过这样做并将结果限制为1,您可以保证您将获得27之后的条目


这也适用于日期排序。

我认为这是一个合理的问题,我甚至考虑了一下。所以我想在这里分享我的解决方案

要解决这个问题,我要做的是创建一个新查询,其中新id小于/大于旧id,如下所示:

SELECT *
FROM myTable t
WHERE t.id > 27
ORDER BY t.id
LIMIT 1
通过这样做并将结果限制为1,您可以保证您将获得27之后的条目

这也适用于日期订单。

这个怎么样:


选择最小值(myTable.Id)
从myTable
其中myTable.Id>27

这个怎么样:


选择最小值(myTable.Id)
从myTable
其中myTable.Id>27

使用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

使用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

这也可以,但是,您还需要在MIN()中包装要选择的每一列。不过,这是一个可行的解决方案。这也可行,但是,您还需要在MIN()中包装要选择的每一列。但这是一个可行的解决方案。一个查询中的查询?我们需要更深入!但说真的,这让问题变得过于复杂了。它确实有效,我只是不认为这个解决方案比其他解决方案有任何优势。它确实允许您选择所需的任何列,而不必对所有列进行MIN()操作,但第一个建议已经做到了这一点。如果出于某种原因,您不想使用LIMIT,我想这可能会起作用。在查询中使用一个查询?我们需要更深入!但说真的,这让问题变得过于复杂了。它确实有效,我只是不认为这个解决方案比其他解决方案有任何优势。它确实允许您选择所需的任何列,而不必对所有列进行MIN()操作,但第一个建议已经做到了这一点。我想如果出于某种原因,您不想使用限制,这可能会起作用。