cwui 2024-07-10 17:30 采纳率: 27.8%
浏览 12
已结题

输入一个值,直到没有对应的值为止

img

**如上图,表TAB1 , ID = 123 找到 ID_F = 456
同一个表,把456带入ID , 找到 ID_F = 789,
以此类推,最后902找不到对应 ID_F,则结束查找。查找的过程,可能需要查找1次,也可能100次
即输入123,得到结果902

用sybase sql怎么写 ?**

  • 写回答

30条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-10 17:30
    关注

    引自免费微信小程序:皆我百晓生

    在Sybase SQL中,你可以使用递归的公用表表达式(CTE)来实现这个需求。首先,你需要一个初始的ID值,然后使用递归查询找到下一个ID_F的值,直到没有对应值为止。这里提供一个示例的SQL代码来完成这个任务:

    假设你开始时的ID值为初始值@initial_id(这里是'123')。SQL代码可能是这样的:

    DECLARE @initial_id INT = 123;  -- 这里设置你的初始ID值
    DECLARE @next_id INT;  -- 用于存储找到的下一个ID值
    DECLARE @result INT;  -- 用于存储最终的结果值
    DECLARE @done INT = 0;  -- 用于标记是否找到最后一个ID值
    
    WITH RecursiveCTE AS (
        SELECT ID, IDF
        FROM TAB1
        WHERE ID = @initial_id  -- 从初始ID开始查询
        UNION ALL  -- 表示这是一个递归查询
        SELECT T.ID, T.IDF FROM TAB1 T JOIN RecursiveCTE CTE ON T.ID = CTE.IDF WHERE CTE.@done = 0 -- 从前一次查询得到的IDF继续查询,直到没有对应的值为止(由@done变量控制)
    )
    SELECT TOP 1 @next_id = ID FROM RecursiveCTE WHERE @done = 0;  -- 获取下一个ID值,同时设置@done为已找到最后一个ID的值(或者重置为继续查找)
    SET @result = @next_id;  -- 存储最终结果值
    SET @done = CASE WHEN @@ROWCOUNT = 0 THEN 1 ELSE 0 END;  -- 判断是否找到最后一个ID值
    WHILE @done = 0 DO  -- 当还有对应的值时继续循环
        SET @next_id = NULL;  -- 重置下一个ID值为NULL以便查找新的对应值
        WITH RecursiveCTE AS ( ... 同上 ... )  -- 同上逻辑,这里省略具体代码
    LOOP;  -- 结束循环语句
    PRINT @result;  -- 输出最终的结果值(即最后一个找到的ID值)
    

    请注意,这个代码是一个示例,可能需要根据你的具体数据库结构和需求进行调整。特别是递归查询的部分,你需要确保它正确地处理你的数据并终止递归。此外,还需要注意检查是否每个步骤都成功执行,以避免可能的错误或异常。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月15日
  • 修改了问题 7月10日
  • 创建了问题 7月10日

悬赏问题

  • ¥15 问题重发,R语言:代码运行过程中出现如下警告,请求如何解决!
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响