我搜索了其他相关的主题,但我不认为我正在寻找UNION或OUTER JOIN。我想要做的事情在理论上非常简单。我在两个不同的数据库中有两个表,两个数据库的数据大致相同。我试图把它们放在一起,以便我们可以比较它们。字段名称不同,但数据非常相似。
想象一下这样的事情:
表'foo':
id first_name last_name dept_name
+---+----------+---------------+-------------+
| 1|Bob |Boberson | Accounting |
| 2|Steven |McStevens | Sales |
| 3|Jane |Janeston | Support |
+---+----------+---------------+-------------+
表'bar':
person_id first last department_id
+----------+----------+---------------+--------------+
| 1|Bob |Boberson | 2|
| 2|Doug |Dugger | 5|
| 3|Jane |Janeston | 3|
+----------+----------+---------------+--------------+
我正试图以这样的方式结束:
person_id first last department
+----------+----------+---------------+--------------+
| foo_1|Bob |Boberson | Accounting |
| foo_2|Steven |McStevens | Sales |
| foo_3|Jane |Janeston | Support |
| bar_1|Bob |Boberson | Accounting |
| bar_2|Doug |Dugger | IT |
| bar_3|Jane |Janeston | Support |
+----------+----------+---------------+--------------+
通过两个单独的选择使用'as'来更改列名,各个字段的concat以及执行适当的连接以填充'department'字段,这很容易让两个表彼此相似。但是,我不能做“加入”并保持这种逻辑。我真的需要为每个表做一个select语句。这里可能有一个简单的解决方案,但我没有看到它。
编辑:你们是对的,这是一个非常标准的UNION案例。我以为UNIONS总是出于某种原因添加列。感谢。答案 0 :(得分:1)
我认为您可以使用UNION
如果您不想删除任何重复的名称,那么将从1个查询中的两个表中获取数据,您可以将表名作为查询的一部分来获取前缀如果你想要的人_id
这需要测试/改进,但是:
(SELECT foo AS table, f.id AS person_id, f.first_name AS first, f.last_name AS last, f.dept_name FROM foo AS f)
UNION
(SELECT bar AS table, b.person_id, b.first, b.last, FROM bar AS b)
答案 1 :(得分:1)
这看起来与UNION
完全相同看一下SQL Fiddle,我没有费心去查找部门ID,但这应该给你基本的想法。