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
相关产品推荐
相关产品推荐

