首页 > 解决方案 > MySQL-从 5 个表中查找最新数据

问题描述

我有5个表,数据如下

表格1

id_1     name          created_at                        flag
=============================================================
1        Daniel        2021-03-16 12:25:18                0
2        Pearson       2021-03-18 10:25:10                0
3        Scottie        2021-03-19 12:25:18               0
4        Mike           2021-03-21  13:40:03              0  

表 2

id_2     name            created_at                    flag
==============================================================
1        Louis           2021-03-11  10:25:10            0
2        Jessica         2021-03-12  11:36:16             0
3        Maggie         2021-03-21   12:25:18             0
4        Megan            2021-03-13 13:40:03             0  

表3

id_3     name            created_at                      flag
==================================================================
1        Jon               2021-03-10 12:16:45             0
2       Natalie            2021-03-08 12:45:15             0
3       Victoria           2021-03-08 12:51:00             0
4        Michael           2021-02-12 12:51:17             0  

表 4

id_4      name            created_at                      flag
==============================================================
1        Emily           2021-03-11 13:14:23                0
2        Rose             2021-03-11 12:14:20               0
3       Abigaile           2021-03-11 15:28:56              0
4       Mac               2021-03-11 13:14:23               0  

表 5

id_5      name            created_at                        flag
==================================================================
1        Abella            2021-03-12 12:51:17               0
2        Patrick            2021-03-12 11:48:17              0
3        Josh               2021-03-12 10:52:17              0
4        Goldwin            2021-03-12 13:24:17              0  

我想获取最新的数据和最过时的数据。

这个问题的答案基本相同,基于两张表。但是,如果有 5 个(如我的情况),甚至更多怎么办。我应该使用join还是有更好的?

PS-另外,每个表中可能有数以万计的数据要搜索。

标签: mysql

解决方案


在这种情况下,最好在相同的表之间执行联合作为子查询,然后执行排序操作并可能对结果进行限制。您可以为两个不同的查询翻转ORDER BY ( DESC / ASC )。

SELECT name,
       created_at
FROM   (SELECT name,
               created_at
        FROM   table1
        UNION
        SELECT name,
               created_at
        FROM   table2) t
ORDER  BY created_at DESC
LIMIT  5; 

推荐阅读