如何编写SQL查询合并两个结构相似表并按date字段排序
合并两张表按日期排序的SQL实现
需求说明
- 两张表
TABLE_A、TABLE_B结构一致,均包含字段:id、content、date - 需要将两张表所有数据合并后,按
date字段统一排序输出
测试数据参考:
- TABLE_A存储数据:(1,Joe,20-11-2020)、(2,John,20-11-2021)
- TABLE_B存储数据:(1,Luke,20-11-2010)、(1,Mark,20-11-2011)
- 预期排序结果:(1,Luke,20-11-2010)、(1,Mark,20-11-2011)、(1,Joe,20-11-2020)、(2,John,20-11-2021)
实现SQL
用UNION ALL完成两张表的数据合并,再在外层查询做统一排序即可。不要用UNION——UNION会自带去重逻辑,性能更低,还可能误删两张表中重复的有效数据。
SELECT id, content, `date` FROM ( SELECT id, content, `date` FROM TABLE_A UNION ALL SELECT id, content, `date` FROM TABLE_B ) AS merged_data ORDER BY `date` ASC;
注意事项
- 如果你的
date字段存的是字符串格式(比如示例中的DD-MM-YYYY格式字符串),一定要先转成日期类型再排序,否则会按字符串字典序排序导致结果错乱。以MySQL为例,转换后的写法如下:
SELECT id, content, `date` FROM ( SELECT id, content, STR_TO_DATE(`date`, '%d-%m-%Y') AS `date` FROM TABLE_A UNION ALL SELECT id, content, STR_TO_DATE(`date`, '%d-%m-%Y') AS `date` FROM TABLE_B ) AS merged_data ORDER BY `date` ASC;
- 如果后续需要区分数据来源,可以在子查询中新增来源字段,例如
SELECT id, content,date, 'A' AS table_source FROM TABLE_A。
内容的提问来源于stack exchange,提问作者Jeral
相关产品推荐
相关产品推荐

