2

我有两个相似的表,并希望通过一个查询从两个表中给出一个结果,结果类似于一个表(行作为串联并随时间排序)

我的表 1:

time    name    Comment
-------------------------
45      asd     testasd
49      gas     testgas
50      has     testhas
96      bag     testbag

我的表 2:

time    name    Comment
-------------------------
48      hjasf   bigasd
54      adg     biggas
65      zxx     bighas
115     cxx     bobbag
131     xxb     bobhas

结果:

time    name    Comment
-------------------------
45      asd     testasd
48      hjasf   bigasd
49      gas     testgas
50      has     testhas
54      adg     biggas
65      zxx     bighas
96      bag     testbag
115     cxx     bobbag
131     xxb     bobhas

我尝试这样做但不知道,我必须使用 JOIN 或 UNION 或...?

4

4 回答 4

3

您只需要使用UNION ALLALL - 允许重复。

SELECT time, name, Comment FROM table1
UNION ALL
SELECT time, name, Comment FROM table2
ORDER BY time

UNION命令用于从两个表中选择相关信息,很像 JOIN 命令。但是,当使用 UNION 命令时,所有选定的列都需要具有相同的数据类型。使用 UNION,只选择不同的值。

UNION ALL命令与 UNION 命令相同,只是 UNION ALL 选择所有值。

Union 和 Union all 之间的区别在于,Union all 不会消除重复的行,而是只会从适合您的查询细节的所有表中提取所有行并将它们组合成一个表。

输出将如下所示,

╔══════╦═══════╦═════════╗
║ TIME ║ NAME  ║ COMMENT ║
╠══════╬═══════╬═════════╣
║   45 ║ asd   ║ testasd ║
║   48 ║ hjasf ║ bigasd  ║
║   49 ║ gas   ║ testgas ║
║   50 ║ has   ║ testhas ║
║   54 ║ adg   ║ biggas  ║
║   65 ║ zxx   ║ bighas  ║
║   96 ║ bag   ║ testbag ║
║  115 ║ cxx   ║ bobbag  ║
║  131 ║ xxb   ║ bobhas  ║
╚══════╩═══════╩═════════╝
于 2013-01-23T15:34:09.367 回答
1

如果两个表具有相同数量的字段,则可以使用:

SELECT * from MyTable1
UNION ALL
SELECT * from MyTable2
ORDER BY time

UNION ALL 将选择第一个查询的所有行,并结合第二个查询的所有行。如果您需要删除重复项,您应该使用 UNION 而不是 UNION ALL。ORDER BY 子句将按时间对结果行进行排序。

在此处查看UNION子句的文档。

于 2013-01-23T15:34:05.843 回答
1

http://www.w3schools.com/sql/sql_union.asp

使用带有 union all 的 select 语句来实现这一点

于 2013-01-23T15:41:12.787 回答
0

使用 UNION ALL 如下:

SELECT `time`, `name`, `Comment` FROM `MyTable1`
UNION ALL
SELECT `time`, `name`, `Comment` FROM `MyTable2`

要按时间订购,请尝试:

SELECT * FROM (
SELECT `time`, `name`, `Comment` FROM `MyTable1`
UNION ALL
SELECT `time`, `name`, `Comment` FROM `MyTable2`
) AS `Result` ORDER BY `time` ASC
于 2013-01-23T15:36:31.080 回答