mariadb MySQL从多个表中选择,保留所有列和行,不进行匹配

eagi6jfj  于 2022-11-23  发布在  Mysql
关注(0)|答案(2)|浏览(115)

我有两张table
tableA
| 标识符|日期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
pxiryf3j

pxiryf3j1#

使用UNION ALLORDER BY。这需要枚举列:

select id, dateA as dateX, colA, null as colB from tableA
union all
select id, dateB, null, colB from tableB
order by dateX

union all组合了两个数据集,因为我们在两个表中有不同的列,所以我们需要安排两个select子句,以便它们返回相同的列集合; null值可用于填充给定数据集中的"缺失"列。
至于排序结果集:在MySQL中,UNION ALL查询中的单个ORDER BY应用于整个结果集(* 在 * 它被联合之后)。

cl25kdpy

cl25kdpy2#

如果你想把共享相同iddate的行显示为一行,你可以在GMB的答案之上构建:

select id, dateX as date, max(colA) as colA, max(colB) as colB
from (
  select id, dateA as dateX, colA, null as colB from tableA
  union all
  select id, dateB, null, colB from tableB
) as q
group by id, dateX
order by dateX

请参阅db-fiddle

相关问题