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

SQL多表关联查询如何在结果中标注数据所属的源表名

调整后的实现方案

你的原始SQL存在语法错误(多写了冗余的FROM关键字、SELECT *不符合自定义输出字段需求),调整后可直接实现需求:

SELECT 
    -- 按要求拼接展示字符串
    CONCAT(
        'ID:', COALESCE(Import_TEST.ID, DDV.ID),
        ' 结果', 
        CASE 
            WHEN Import_TEST.XX = 'P' THEN 'P'
            WHEN DDV.XX = 'O' THEN 'O'
            ELSE ' '
        END,
        ' - ',
        -- 判断数据来源
        CASE
            WHEN Import_TEST.ID IS NOT NULL AND DDV.ID IS NULL THEN 'Import_TEST'
            WHEN DDV.ID IS NOT NULL AND Import_TEST.ID IS NULL THEN 'DDV'
            -- 两表匹配到的关联数据可自定义展示内容
            ELSE 'Import_TEST&DDV'
        END
    ) AS final_display,
    -- 可按需保留其他原始字段
    COALESCE(Import_TEST.ID, DDV.ID) AS ID,
    CASE 
        WHEN Import_TEST.XX = 'P' THEN 'P'
        WHEN DDV.XX = 'O' THEN 'O'
        ELSE ' '
    END AS Test
FROM #_tmpImport Import_TEST
FULL JOIN #_tmp_DDVI DDV ON Import_TEST.ID = DDV.ID

逻辑说明

  • 用COALESCE(Import_TEST.ID, DDV.ID)获取统一ID,解决FULL JOIN下两个表ID可能有一个为空的问题
  • 来源判断逻辑:
    • 仅Import_TEST.ID非空:数据仅来自Import_TEST表
    • 仅DDV.ID非空:数据仅来自DDV表
    • 两个ID都非空:属于两张表匹配到的关联数据,可按业务需求调整展示内容

兼容方案

如果你使用的数据库不支持CONCAT函数(比如低版本SQL Server),可以用+号做字符串拼接,替换final_display字段的生成逻辑即可:

'ID:' + CAST(COALESCE(Import_TEST.ID, DDV.ID) AS VARCHAR) +
' 结果' + 
CASE 
    WHEN Import_TEST.XX = 'P' THEN 'P'
    WHEN DDV.XX = 'O' THEN 'O'
    ELSE ' '
END +
' - ' +
CASE
    WHEN Import_TEST.ID IS NOT NULL AND DDV.ID IS NULL THEN 'Import_TEST'
    WHEN DDV.ID IS NOT NULL AND Import_TEST.ID IS NULL THEN 'DDV'
    ELSE 'Import_TEST&DDV'
END AS final_display

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:03