将具有不同列和数据的两个表合并

Posted

技术标签:

【中文标题】将具有不同列和数据的两个表合并【英文标题】:Combine two tables with different columns and data 【发布时间】:2020-12-09 10:08:47 【问题描述】:

即使表 2 上没有 CompanyC 的关系,我如何将两个具有不同数据的表合并并将 CompanyC 的值设置为表 2 中的所有数据。

  Table 1:                                 Table 2:

company     jobs                          company     jobs     emp_name
-----------------------------------      ---------------------------------
CompanyA     IT                           CompanyA     IT        John
CompanyB     Business                     CompanyB     Business  Mike
CompanyC     Engineer                     

结果表如下:

company     jobs            emp_name           
------------------------------------------    
CompanyA     IT                John     
CompanyC     Engineer          John  
CompanyB     Business          Mike      
CompanyC     Engineer          Mike

我已经尝试过了,它正在工作,但问题是因为 CompanyC 在表 2 中没有数据。结果将为空。

select coalesce(t1.company, t2.company)
       t1.jobs, t2.emp_name
from table1 t1 full outer join
     table2 t2
     on t2.name = t1.name;

【问题讨论】:

C公司与Mike & John的关系从何而来?他们分别为 B 公司和 A 公司工作 是的,没有关系。在 C 公司和约翰迈克之间。但在我的结果表上,我想为 John 和 Mike 设置 CompanyC。 那么,再一次,这种关系从何而来? “我要”并没有解释其背后的逻辑。 Table2 上没有 CompanyC 的关系,但我想将 CompanyC 设置为我的结果表上的所有数据。 @Jboy 顺便说一句,您似乎没有曾经接受过问题的答案。网站礼仪是接受解决您问题的答案并对任何有用的答案进行投票。如果您的问题没有答案,请继续回复 cmets 并澄清您的问题,直到您得到答案。 【参考方案1】:

您可以对表进行INNER 连接,并在ON 子句中使用NOT EXISTS,如下所示:

SELECT 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)

请参阅demo。 结果:

> company  | jobs     | emp_name
> :------- | :------- | :-------
> CompanyA | IT       | John    
> CompanyC | Engineer | John    
> CompanyB | Business | Mike    
> CompanyC | Engineer | Mike

【讨论】:

@forpas 如果 table2 有表 1 上不存在的数据,是否仍然可以加入? @Jboy 我的查询回答了您发布的原始问题。如果您有新要求,您可以发布一个新问题,而不是更改原始要求,从而使您已经收到的答案无效。 好的@forpas我会发布新问题谢谢。 @forpas ***.com/questions/65230303/… @Dale K 我已经接受了这个答案并标记了它。由于我现在正在开发下一步,这就是我创建新问题的原因。

以上是关于将具有不同列和数据的两个表合并的主要内容,如果未能解决你的问题,请参考以下文章

SQL中如何从两张表中创建一张表

如何合并具有不同列号的两个表,同时删除具有大量列的表的重复项

合并具有不同记录数的两个表

SQL 如何将一个表中的两条或多条拥有相同ID的记录合并为一条?

Python Pandas - 连接两个具有不同行数和列数的数据框

Python合并两个具有不同日期时间的数据框[重复]