【问题标题】:Getting data from two different tables into one single table?将两个不同表中的数据放入一个表中?
【发布时间】:2009-09-19 17:39:23
【问题描述】:

我有以下两张表:

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) ...

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

【问题讨论】:

  • RD:您打算使用这些数据来创建一个实际的表以供以后使用,还是要将数据收集为单个结果?
  • 单个结果。联盟是我要找的!谢谢!

标签: sql join


【解决方案1】:

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 收集的结果集与UNION ALL 相比在排序顺序上有所不同。我建议您在收集结果集后使用明确的ORDER BY 语句,以确保您的排序顺序符合您的预期。

还请注意,在UNIONed 的结果集中,列数必须匹配。从 OP 中不清楚这两个表在它们存储的列数方面有何不同,所以我很犹豫在两个 SELECT * 语句之间做一个 UNION

【讨论】:

  • 如果你想从中创建一个真实的表,具体的语句取决于你使用的数据库。在大多数情况下,它是“创建表 foo 作为选择 uid,ABC ...”
  • @KingPong:我认为 OP 的意思是他/她想要一个结果集,不一定是一个真实的表格。我已经向 OP 发表了评论,因为您可能是对的。
【解决方案2】:

选择 * 到 table3 from (select * from table1 union select * from table2) as tmp

【讨论】:

  • 让我们希望一堆其他的东西有相同的架构。
【解决方案3】:

这将合并两个结果集。为了进行联合,列必须是兼容的类型。

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

【讨论】:

    【解决方案4】:

    请记住,联合命令将删除重复的行。 如果这不是您想要的行为,您可以使用 union all。

    【讨论】:

      猜你喜欢
      • 2011-06-28
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多