结合 2 个表,每个表都有不同的数据

Posted

技术标签:

【中文标题】结合 2 个表,每个表都有不同的数据【英文标题】:Combine 2 Tables with different data on each 【发布时间】:2020-12-10 07:39:44 【问题描述】:

如何将两个具有不同数据的表组合起来,并将 CompanyC 的值设置为表 2 中的所有数据,CompanyD 与表 1 没有关系。我希望 Company C 设置表 2 中的所有数据。

   T1:                                 T2:

company     jobs                        emp_id  company     jobs     emp_name
-----------------------------------      -------------------------------------
CompanyA     IT                          1      CompanyA     IT        John
CompanyB     Business                    2      CompanyB     Business  Mike
CompanyC     Engineer                    3      CompanyD     Nurse     Mitch

结果表会是这样的:

emp_id     company      jobs            emp_name           
----------------------------------------------     
1          CompanyA     IT                John     
1          CompanyC     Engineer          John  
2          CompanyB     Business          Mike      
2          CompanyC     Engineer          Mike
3          CompanyD     Nurse             Mitch
3          CompanyC     Engineer          Mitch

这是我尝试过的

 SELECT  t2.emp_id, coalesce(t1.company_name, t2.company_name) AS company_name, 
    coalesce(t1.jobs, t2.jobs) AS jobs, 
    t2.emp_name, 
FROM Table1 t1  
    FULL OUTER JOIN      
    Table2 t2 ON t2.company = t1.company AND t2.jobs = t1.jobs

【问题讨论】:

这能回答你的问题吗? Combine two tables with different columns and data 这个问题已经解决了。我发布了这个新问题,因为我在 T2 上添加了一些与 T1 无关的数据。我不想编辑上一个问题,因为它已经解决了 你仍然没有解释所需的逻辑。 @Squirrel 我正在使用完全外连接,但由于公司 C 和公司 D 彼此没有关系,因此它将变为空 请至少向我们展示您的尝试... 【参考方案1】:

最简单的逻辑是将其划分为小逻辑,然后使用union,如下所示:

Select t2.*
  From t1 join t2 on t1.company = t2.comapny and t1.jobs = t2.jobs
Union
Select t1.company, T2.jobs, T2.emp_name
  From t1 cross join t2
Where not exists (select 1 from t2 t22
                   Where t1.company = t22.comapny and t1.jobs = t22.jobs)
Union 
Select t2.* 
  From t2 where not exists ( select 1 from t1 
                              where t1.company = t2.comapny and t1.jobs = t2.jobs)

【讨论】:

这只显示company jobs emp_name -------------------------------------------------- ` ` CompanyA IT John CompanyB Business John CompanyZ Nurse John @Jboy 我已经更新了答案。请立即查看【参考方案2】:

您可以为Table1 中存在的公司创建INNER JOIN 的表,然后为Table2 中不存在的Table1 中的公司创建UNION ALL

SELECT t2.emp_id, t1.company, t1.jobs, t2.emp_name
FROM Table1 t1 INNER JOIN Table2 t2
ON t2.company = t1.company
OR NOT EXISTS (SELECT 1 FROM Table2 WHERE company = t1.company)
UNION ALL
SELECT t2.*
FROM Table2 t2
WHERE NOT EXISTS (SELECT 1 FROM Table1 WHERE company = t2.company)

您的问题不清楚您是否必须仅在companyjobs 上链接这两个表,在这种情况下您应该使用此查询:

SELECT t2.emp_id, t1.company, t1.jobs, t2.emp_name
FROM Table1 t1 INNER JOIN Table2 t2
ON t2.company = t1.company  AND t2.jobs = t1.jobs
OR NOT EXISTS (SELECT 1 FROM Table2 WHERE company = t1.company AND jobs = t1.jobs)
UNION ALL
SELECT t2.*
FROM Table2 t2
WHERE NOT EXISTS (SELECT 1 FROM Table1 WHERE company = t2.company AND jobs = t2.jobs)

请参阅demo。 结果:

emp_id | company  | jobs     | emp_name
-----: | :------- | :------- | :-------
     1 | CompanyA | IT       | John    
     1 | CompanyC | Engineer | John    
     2 | CompanyB | Business | Mike    
     2 | CompanyC | Engineer | Mike    
     3 | CompanyC | Engineer | Mitch   
     3 | CompanyD | Nurse    | Mitch  

【讨论】:

谢谢。它对我有用,但我还有最后一个问题要继续完成。我会发一个新的。 ***.com/questions/65248274/…这是我的最后一个问题

以上是关于结合 2 个表,每个表都有不同的数据的主要内容,如果未能解决你的问题,请参考以下文章

Java - 合并来自不同数据源中的 2 个表的数据

如何组合来自4个mysql表的数据

在具有四个表的Oracle数据库中创建视图,每个表都有主键

联合所有在 SQL Server 中的视图性能问题

SQL:使用 2 个不同的 auto_increment 创建关系表

SSIS 动态表和数据流中的列数