**如上图,表TAB1 , ID = 123 找到 ID_F = 456
同一个表,把456带入ID , 找到 ID_F = 789,
以此类推,最后902找不到对应 ID_F,则结束查找。查找的过程,可能需要查找1次,也可能100次
即输入123,得到结果902
用sybase sql怎么写 ?**
**如上图,表TAB1 , ID = 123 找到 ID_F = 456
同一个表,把456带入ID , 找到 ID_F = 789,
以此类推,最后902找不到对应 ID_F,则结束查找。查找的过程,可能需要查找1次,也可能100次
即输入123,得到结果902
用sybase sql怎么写 ?**
引自免费微信小程序:皆我百晓生
在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值)
请注意,这个代码是一个示例,可能需要根据你的具体数据库结构和需求进行调整。特别是递归查询的部分,你需要确保它正确地处理你的数据并终止递归。此外,还需要注意检查是否每个步骤都成功执行,以避免可能的错误或异常。