如何编写SQL查询合并两表数据并按Datetime排序获取指定结果?
解决方案:合并Deposits与Withdrawal表并按时间排序
你需要用UNION ALL来实现这个需求——JOIN是用来关联两个表的匹配行,而你要的是把两个表的记录作为独立行合并,缺失字段留空。直接看代码:
SELECT Name, D_Currency, D_Amount, NULL AS W_Currency, NULL AS W_Amount, Datetime FROM Deposits UNION ALL SELECT Name, NULL AS D_Currency, NULL AS D_Amount, W_Currency, W_Amount, Datetime FROM Withdrawal ORDER BY Datetime ASC;
代码说明:
- 第一个查询从
Deposits表提取数据,把属于Withdrawal的字段用NULL填充,保证两个结果集的字段数量、类型一致 - 第二个查询从
Withdrawal表提取数据,同理填充Deposits相关字段为NULL UNION ALL用来合并两个结果集(如果用UNION会自动去重,这里不需要,用ALL性能更优)- 最后通过
ORDER BY Datetime ASC实现按时间从小到大排序
执行后得到的结果:
| Name | D_Currency | D_Amount | W_Currency | W_Amount | Datetime |
|---|---|---|---|---|---|
| Michael | USD | 500 | NULL | NULL | 2022-12-10 09:12:45 |
| Michael | NULL | NULL | USD | 500 | 2022-12-11 09:55:32 |
| John | NULL | NULL | USD | 300 | 2022-12-13 13:33:43 |
| John | KRW | 7000 | NULL | NULL | 2022-12-13 15:21:08 |
| Susan | JPY | 10000 | NULL | NULL | 2022-12-15 12:34:11 |
| Susan | NULL | NULL | EUR | 800 | 2022-12-17 11:23:45 |
内容的提问来源于stack exchange,提问作者j21chon
相关产品推荐
相关产品推荐

