我有两张tabletableA
:
| 标识符|日期A|可乐|一个人。|
| - -| - -| - -| - -|
| 一个|2022年11月11日12时00分|A级||
| 2个|2022年11月12日12时00分|乙||
| 三个|2022年11月14日12时00分|C语言||tableB
:
| 标识符|日期B|列B|一个人。|
| - -| - -| - -| - -|
| 三个|2022年11月5日12时00分|D级||
| 四个|2022年11月6日12时00分|E级||
| 五个|2022年11月13日12时00分|F级||
我想把所有行放到一个结果中,并按列date
排序
所需结果(两个表中的行按date DESC
列排序):
| 标识符|日期|可乐|列B|一个人。|一个人。|
| - -| - -| - -| - -| - -| - -|
| 三个|2022年11月14日12时00分|C语言||||
| 五个|2022年11月13日12时00分||F级|||
| 2个|2022年11月12日12时00分|乙||||
| 一个|2022年11月11日12时00分|A级||||
| 四个|2022年11月6日12时00分||E级|||
| 三个|2022年11月5日12时00分||D级|||
我可以组合table,但是table被"压扁了"...
SELECT
COALESCE(a.id, b.id) AS id,
COALESCE(a.dateA, b.dateB) AS date,
a.colA,
b.colB
FROM tableA AS a, tableB AS b
ORDER BY date DESC
2条答案
按热度按时间pxiryf3j1#
使用
UNION ALL
和ORDER BY
。这需要枚举列:union all
组合了两个数据集,因为我们在两个表中有不同的列,所以我们需要安排两个select
子句,以便它们返回相同的列集合;null
值可用于填充给定数据集中的"缺失"列。至于排序结果集:在MySQL中,
UNION ALL
查询中的单个ORDER BY
应用于整个结果集(* 在 * 它被联合之后)。cl25kdpy2#
如果你想把共享相同
id
和date
的行显示为一行,你可以在GMB的答案之上构建:请参阅db-fiddle