2013-05-07 64 views
0

我搜索了其他相关的线程,但我不认为我正在寻找一个联合或外部联接。我想要做的是理论上很简单。我在两个不同的数据库中有两个表,两个数据大致相同。我试图将它们展示在一起,以便我们可以对它们进行比较。字段名称不同,但数据非常相似。Mysql选择从两个表中选择比较

想象这样的事情:

表 '富':

id first_name last_name  dept_name 
+---+----------+---------------+-------------+ 
| 1|Bob  |Boberson  | Accounting | 
| 2|Steven |McStevens  | Sales  | 
| 3|Jane  |Janeston  | Support  | 
+---+----------+---------------+-------------+ 

表 '酒吧':

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语句。这里可能有一个简单的解决方案,但我没有看到它。

编辑:你们是正确的,这是一个非常标准的情况下的联盟。我以为工会总是因为某种原因增加专栏。谢谢。

+0

所以你不想加入/修剪每个表中的重复项?那你想要一个'UNION'? – 2013-05-07 20:39:20

+0

嗯,你可能是对的。我在想联盟会创造更多的专栏。我可能没有做我的作业。 – 2013-05-07 20:42:52

回答

1

我认为你可以使用UNION如果你不想修剪任何重复的名字然后在一个查询中从两个表中获取数据,你可以获取表名作为你的查询的一部分以person_id为前缀if你想

这需要测试/改善,但:

(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

这看起来很像一个UNION

看一看为SQL Fiddle,我也懒得做了部门ID查找,但这应该给你基本的理念。