Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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_Sql Server - Fatal编程技术网

Sql 查询选择下一个id订单

Sql 查询选择下一个id订单,sql,sql-server,Sql,Sql Server,我有一张带有ID和NextID的表,如下所示: MainID || NextID 1 || 2 2 || 3 3 || 5 4 || 6 5 || 4 6 || ... ... || ... 我想要实现的是像这样选择数据 MainID || NextID 1 || 2 2 || 3 3 || 5 5 || 4 4 || 6

我有一张带有ID和NextID的表,如下所示:

MainID  ||  NextID
1       ||  2
2       ||  3
3       ||  5
4       ||  6
5       ||  4
6       ||  ...
...     ||  ...
我想要实现的是像这样选择数据

MainID  ||  NextID
1       ||  2
2       ||  3
3       ||  5
5       ||  4
4       ||  6
6       ||  ...
...     ||  ...
我尝试的是简单的查询,如:

SELECT * FROM 'table' ORDER BY NextID
但它当然不能满足我的需要, 我有一个创建临时表和使用循环插入的想法,但需要花费太多时间来完成:

WHILE @NextID IS NOT NULL
BEGIN
    INSERT INTO 'table'(MainID, NextID)
    SELECT MainID, NextId
    FROM 'table' WHERE MainID=@NextID

END
有人能帮我吗


谢谢

对于这种特殊情况,您可以使用right join进行订购

select t2.*
  from some_table t1
 right join some_table t2
    on t1. main_id = t2.next_id
 order by case when t2.next_id is null then 9999999 else t2.main_id + t2.next_id end;
order by part中的999999将最后一行6(null)放在输出的末尾


如果对实际数据采用查询,祝您好运

递归cte将按访问节点的顺序返回行

with t as (
  select f.*, right('00000000'+cast(f.mainId as varchar(max)),9) path
  from yourtable f
  where MainID=1
  union all
  select f.*, path + '->' + right('00000000'+cast(f.mainId as varchar(max)),9)
  from t
  join yourtable f on t.NextID = f.MainID
)
select * 
from t
order by path
其中MainId=1是任意开始。你也可以从 如果不存在,请从表f2中选择1,其中f2.Nextid=f.MainId

编辑


通过添加明确的顺序

这完全是我想要的,如果MainID=1可以更灵活地获得最低的主id数据,那将是完美的,谢谢!!可能在不存在的地方从表f2中选择1,其中f2.Nextid=f.MainIdNo,此代码以任意顺序返回行,因为外部查询中没有order by。代码可能会以特定顺序返回行,但这是巧合,没有order by不能保证。@GordonLinoff,谢谢,添加了order by根据问题指南,请显示您尝试过的内容,并告诉我们您在本网站或其他地方发现了什么,以及为什么它不能满足您的需要。编辑,我真的很抱歉