结合 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)
您的问题不清楚您是否必须仅在company
或jobs
上链接这两个表,在这种情况下您应该使用此查询:
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 个表,每个表都有不同的数据的主要内容,如果未能解决你的问题,请参考以下文章