如何合并不同列数据表并为无关联的CompanyC匹配全量Table2数据
嘿,我看你要的是把Table1里的CompanyC和Table2的所有记录强制匹配,同时保留两张表原本能关联上的记录对吧?之前的full outer join思路不对,因为它只会保留两边没匹配上的行并填充null,而不是主动生成CompanyC和Table2每条记录的组合。
解决方案
给你个直接能解决问题的SQL:
-- 先获取两张表中company和jobs都匹配的正常关联记录 SELECT t1.company, t1.jobs, t2.emp_name FROM table1 t1 INNER JOIN table2 t2 ON t1.company = t2.company AND t1.jobs = t2.jobs -- 再生成CompanyC与Table2所有记录的全量组合 UNION ALL SELECT t1.company, t1.jobs, t2.emp_name FROM table1 t1 CROSS JOIN table2 t2 WHERE t1.company = 'CompanyC'
执行结果验证
运行后会得到你期望的结果:
| jobs | emp_name |
|---|---|
| IT | John |
| Business | Mike |
| Engineer | John |
| Engineer | Mike |
逻辑说明
- 第一部分用
INNER JOIN抓取两张表中company和jobs均匹配的行,对应期望结果里原本能关联上的记录; - 第二部分用
CROSS JOIN实现Table1中CompanyC记录与Table2所有记录的笛卡尔积,再通过WHERE限定仅保留CompanyC的行,生成你需要的强制匹配组合; - 用
UNION ALL合并两部分结果,因为这两部分无重复数据,UNION ALL比UNION的执行效率更高。
内容的提问来源于stack exchange,提问作者JBA
相关产品推荐
相关产品推荐

