如何从多张表中按日期排序合并查询结果?
解决UNION合并后按Date排序的问题
嘿,我懂你的困扰了——你想把两个表的UID合并后按Date字段整体排序,但当前的SQL语句只是把两个表的结果按顺序拼接,完全没达到按日期排序的效果。
问题出在哪?
你原来的SQL里,每个子查询的ORDER BY DATE DESC其实只和后面的LIMIT 16配合,用来筛选各自表的前16条数据,但UNION操作并不会保留子查询的排序结果,它只是把两个子查询的结果集简单拼接在一起,所以才会先显示table1的所有行,再显示table2的。
正确的SQL写法
要实现整体按Date排序,你需要把UNION合并后的结果作为一个临时表,再在外层对这个临时表进行排序:
SELECT UID FROM ( -- 先合并两个表的UID和Date字段,各自取前16条 SELECT UID, Date FROM table1 LIMIT 16 UNION SELECT UID, Date FROM table2 LIMIT 16 ) AS combined_result -- 对合并后的整体结果按Date升序排序(对应你期望的结果顺序) ORDER BY Date ASC;
补充说明
- 如果你担心两个表中有重复的UID,可以把
UNION换成UNION ALL(不过看你的示例数据没有重复,两种都可以,但UNION ALL性能更好,因为不会去重)。 - 外层的
ORDER BY Date ASC对应你期望的结果顺序:smith(Date=1) → John(Date=2) → Nork(Date=3) → mark(Date=4),如果要倒序就改成DESC。
内容的提问来源于stack exchange,提问作者Abdul
相关产品推荐
相关产品推荐

