如何编写SQL查询实现两表关联并为无匹配ID填充所有Language值?
实现跨表关联并生成全语言匹配行的SQL方案
要满足需求,核心是先构建Table1所有ID与Table2所有唯一语言的全量组合,再通过左关联匹配原有数据中的Name值。这样既能保留Table1的全部ID,又能自动适配Table2新增的语言,无需修改查询语句。
实现代码
SELECT t1.ID, t2.Name, lang.Language FROM Table1 t1 -- 生成Table1所有ID与所有唯一语言的笛卡尔积 CROSS JOIN (SELECT DISTINCT Language FROM Table2) lang -- 左关联匹配对应ID和语言的Name LEFT JOIN Table2 t2 ON t1.ID = t2.ID AND lang.Language = t2.Language -- 按ID和语言排序,与期望结果一致 ORDER BY t1.ID, lang.Language;
代码说明
(SELECT DISTINCT Language FROM Table2):提取Table2中所有不重复的语言值,当Table2新增语言时,这部分会自动获取新语言,无需改动查询CROSS JOIN:将Table1的每个ID与所有语言进行组合,确保每个ID都能覆盖所有语言,包括没有对应Name的ID(如ID3)LEFT JOIN Table2:根据ID和语言双重条件匹配原有数据,存在对应Name则填充,不存在则显示NULLORDER BY:对结果按ID和语言排序,保证输出结构与期望结果一致
内容的提问来源于stack exchange,提问作者fzer0
相关产品推荐
相关产品推荐

