Mysql选择从两个表中进行选择以进行比较

时间:2013-05-07 20:35:23

标签: mysql sql

我搜索了其他相关的主题,但我不认为我正在寻找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总是出于某种原因添加列。感谢。

2 个答案:

答案 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,但这应该给你基本的想法。