You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改递归SQL查询以在结果中新增指定列?

解决方案

要在递归结果中保留触发查询的初始appsession.ID(即你标注的粗体字段),核心是在递归CTE的初始成员中捕获这个值,并在后续递归过程中持续传递它(因为递归是向上追溯根节点,初始ID不会改变)。

修改后的完整SQL如下:

WITH RECURSIVE RecursiveAppsessions AS (
    -- 初始成员:捕获需要的APPSESSION_ID,并关联到对应的appsession记录
    SELECT 
        a.ID, 
        a.ROOTAPPSESSIONID,
        sub.APPSESSION_ID
    FROM appsession a
    JOIN (
        SELECT DISTINCT 
            appsession.ID AS APPSESSION_ID,  -- 这里就是你要保留的那个appsession.ID
            ANALYSISRESULTS.APPSESSIONID
        FROM appsession
        JOIN APIAPPLICATION ON APIAPPLICATION.ID = appsession.APIAPPLICATIONID AND APIAPPLICATION.NAME LIKE '%test%'
        JOIN PROPERTY ON PROPERTY.APPSESSIONID = appsession.ID AND PROPERTY.NAME = 'test'
        JOIN PROPERTYITEM ON PROPERTYITEM.PROPERTYID = PROPERTY.ID
        JOIN ANALYSISRESULTS ON ANALYSISRESULTS.ID = PROPERTYITEM.ANALYSISRESULTSID
    ) sub ON a.ID = sub.APPSESSIONID

    UNION ALL

    -- 递归成员:传递初始的APPSESSION_ID,继续向上追溯根节点
    SELECT 
        rec_a.ID, 
        rec_a.ROOTAPPSESSIONID,
        ra.APPSESSION_ID
    FROM appsession rec_a
    INNER JOIN RecursiveAppsessions ra ON rec_a.ID = ra.ROOTAPPSESSIONID
)
SELECT *
FROM RecursiveAppsessions
WHERE ROOTAPPSESSIONID IS NULL;

关键改动说明:

  • 将原来的WHERE ID IN (...)改为JOIN子查询,这样可以直接获取并保留你需要的appsession.ID(命名为APPSESSION_ID)。
  • 在递归CTE的初始成员中新增APPSESSION_ID字段,确保初始值被捕获。
  • 递归成员中直接传递ra.APPSESSION_ID,因为递归过程中我们只需要保留最初触发查询的那个ID,不需要修改它。

执行后会得到你期望的结果格式:

ID        ROOTAPPSESSIONID  APPSESSION_ID
33738427  Null              432432423

内容的提问来源于stack exchange,提问作者Claudiu Creanga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:32:38