将具有不同列和数据的两个表合并
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 如何将一个表中的两条或多条拥有相同ID的记录合并为一条?