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

如何编写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则填充,不存在则显示NULL
  • ORDER BY:对结果按ID和语言排序,保证输出结构与期望结果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:07:09