2009-09-19 74 views
2

我有以下两个表:从两个不同的表中获取数据到一个表中?

uid | ABC | ... (bunch of other stuff) ... 
1  | val 1 | ... (bunch of other stuff) ... 
2  | val 2 | ... (bunch of other stuff) ... 
3  | val 3 | ... (bunch of other stuff) ... 

和...

uid | DEF | ... (bunch of other stuff) ... 
4  | val 4 | ... (bunch of other stuff) ... 
5  | val 5 | ... (bunch of other stuff) ... 
6  | val 6 | ... (bunch of other stuff) ... 

我想结束了......

uid | text | ... (bunch of other stuff) ... 
1  | val 1 | ... (bunch of other stuff) ... 
2  | val 2 | ... (bunch of other stuff) ... 
3  | val 3 | ... (bunch of other stuff) ... 
4  | val 4 | ... (bunch of other stuff) ... 
5  | val 5 | ... (bunch of other stuff) ... 
6  | val 6 | ... (bunch of other stuff) ... 

这看起来很简单,但我似乎无法弄清楚如何做到这一点。这不是一个加入?是吗?

+0

RD:你打算使用这些数据来创建一个真正的表供以后使用,或者你想收集数据作为一个单一的结果吗? – 2009-09-19 17:51:39

+0

单一结果。联盟是我正在寻找的!感谢名单! – coderama 2009-09-19 18:00:52

回答

5

UNION条款将帮助你在这里。它将两个或多个结果集组合为一个。

尝试:

SELECT uid, ABC, OtherStuff 
FROM Table1 

UNION 

SELECT uid, DEF, OtherStuff 
FROM Table2 

UNION 

SELECT uid, GHI, OtherStuff 
FROM Table3 

ORDER BY uid 

有关于这一主题与UNION ALL运营商的变化。 UNION将显式删除重复的行,而UNION ALL保留它们。

这具有超出行简单差异的影响:删除重复操作符UNION操作员需要对最终结果集进行排序。这是运营商没有经历的开销UNION ALL。此外,与UNION ALL相比,显式排序操作可能导致由UNION收集的结果集的排序顺序不同。我建议您在收集结果集后使用明确的ORDER BY声明,以确保您的排序顺序与您打算的一样。

请注意,结果集中的列数必须匹配UNION ed。从OP中不清楚这两个表在他们存储的列数方面有何不同,因此我不愿在两个SELECT *语句之间执行UNION

+0

如果你想从中创建一个真正的表格,确切的语句取决于你正在使用的数据库。在大多数情况下,它是“创建表foo作为选择uid,ABC ...” – KingPong 2009-09-19 17:47:18

+0

@KingPong:我认为OP意味着他/她想要一个结果集,而不一定是真正的表。我已经向OP发布了评论,因为你可能是对的。 – 2009-09-19 17:52:15

1

选择*到从表3 (SELECT * FROM表1工会SELECT * FROM表2)作为TMP

+0

我们希望其他一些东西都有相同的模式。 – Zed 2009-09-19 17:45:21

1

这将工会两组结果。为了进行联合,列必须是兼容的类型。

(SELECT * FROM table1) UNION (SELECT * FROM table2) 
0

请记住,union命令将删除重复的行。 如果这不是所期望的行为,则希望使用union all。

相关问题