如何按时间顺序从两个或多个表中选择?

时间:2019-04-30 12:09:15

标签: mysql select

我正尝试从两个大日志表中选择一个,并按时间顺序列出所有活动。

假设我有:

Table: MyDb.Building_A
+---------------------+--------------+
| DateTime            | Employee     | (some other columns)
+---------------------+--------------+
| 2019-01-01 08:00:00 | Bob          |
(... millions more rows)

And then another table: MyDb.Building_B
+---------------------+--------------+
| DateTime            | Employee     | (some other columns)
+---------------------+--------------+
| 2019-01-01 08:10:00 | Bob          |
| 2019-01-01 08:20:00 | Peter        |
(... many millions more rows)

现在我的老板希望查看一段时间内所有建筑物的所有访问日志(分页数据):

我有点需要像拉链一样将数据放在一起:

+---------------------+--------------+
| 2019-01-01 08:00:00 | Bob          |
| 2019-01-01 08:10:00 | Bob          |
| 2019-01-01 08:20:00 | Peter        |

我能想到的最好的办法是从两个表中分别选择一个数组(ORDER BY DateTime),用两组数据对数组进行排序(使用多维数组排序),然后将数组修整为单个页面价值的数据。 (我只是想这件事就累了!)

这里效率低下...还有更好的方法吗? (使用MySQL)

1 个答案:

答案 0 :(得分:0)

您可以只使用UNION查询(在此示例中,获取今年的所有访问权限):

(SELECT `DateTime`, Employee 
 FROM MyDb.Building_A
 WHERE `DateTime` BETWEEN '2019-01-01' AND '2019-12-31')
UNION
(SELECT `DateTime`, Employee 
 FROM MyDb.Building_B
 WHERE `DateTime` BETWEEN '2019-01-01' AND '2019-12-31')
ORDER BY `DateTime`

UNION将从每个表中获得所有符合DateTime条件的行,而ORDER BY将按DateTime对所有行进行排序,将建筑物A和B。

请注意,我假设您的DateTime列是MySQL DateDateTime数据类型。如果不是,则可能需要使用STR_TO_DATE进行转换,以使BETWEEN逻辑起作用。