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

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

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 咨询一下有关于王者荣耀赢藏战绩
  • ¥100 求购一套带接口实现实习自动签到打卡
  • ¥50 MacOS 使用虚拟机安装k8s
  • ¥500 亚马逊 COOKIE我如何才能实现 登录一个亚马逊账户 下发新 COOKIE ..我使用下发新COOKIE 导入ADS 指纹浏览器登录,我把账户密码 修改过后,原来下发新COOKIE 不会失效的方式
  • ¥20 玩游戏gpu和cpu利用率特别低,玩游戏卡顿
  • ¥25 oracle中的正则匹配
  • ¥15 关于#vscode#的问题:把软件卸载不会再出现蓝屏
  • ¥15 vimplus出现的错误
  • ¥15 usb无线网卡转typec口
  • ¥30 怎么使用AVL fire ESE软件自带的优化模式来优化设计Soot和NOx?