0

我搜索了其他相关线程,但我认为我不是在寻找 UNION 或 OUTER JOIN。我想做的在理论上很简单。我在两个不同的数据库中有两个表,两者的数据大致相同。我试图将它们放在一起,以便我们可以比较它们。字段名称不同,但数据非常相似。

想象一下这样的事情:

表“富”:

 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 用于各种字段,并进行适当的连接以填写“部门”字段,通过两个单独的选择使两个表彼此相似是很容易的。但是,我不能“加入”并保持这种逻辑。我真的需要为每个表做一个选择语句。这里可能有一个简单的解决方案,但我没有看到它。

编辑:你们是对的,这是一个非常标准的 UNION 案例。我在想 UNIONS 总是出于某种原因添加列。谢谢。

4

2 回答 2

1

我认为UNION如果您不想修剪任何重复的名称,那么您可以使用它会在 1 个查询中从两个表中获取数据,如果您愿意,您可以将表名作为查询的一部分作为 person_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)
于 2013-05-07T20:44:30.237 回答
1

这看起来完全像一个 UNION

看看SQL Fiddle,我没有费心查找部门 ID,但这应该给你基本的想法。

于 2013-05-07T20:52:47.657 回答