如何从两个表中选择行,其中每个表中的一列可以通过通用目的合并



我有两个数据相似但不同的表。这两个表都有自己的插入时间戳列。

Table A                      Table B
+------------+----------+    +------------+----------+
| a_created  | a_data   |    | b_created  | b_data   |
+------------+----------+    +------------+----------+
| 2012-09-01 | A        |    | 2012-09-03 | C        |
| 2012-09-05 | B        |    | 2012-09-04 | D        |
+------------+----------+    +------------+----------+

我想从这些表中获取所有数据,通过合并的日期列按两个创建日期排序。即,我想要以下结果

+------------+----------+----------+
| x_created  | a_data   | b_data   |
+------------+----------+----------+
| 2012-09-01 | A        | NULL     |
| 2012-09-03 | NULL     | C        |
| 2012-09-04 | NULL     | D        |
| 2012-09-05 | B        | NULL     |
+------------+----------+----------+

在不改变模式的情况下,这可能吗?如果是,如何?

select a_created as x_created,a_data,'null' as b_data from table_a
union all 
select b_created as x_created,'null' as a_data,b_data from table_b
order by x_created

sqlfiddle

我使用带引号的"null",因为当你想添加字符串时,它会很方便,但如果你想要真正的null值,可以按照Ike-Worker的建议。

通过添加您要求的排序并使用真正的NULLs:来构建mrmryb的答案

select a_created as x_created,a_data,NULL as b_data 
from table_a
union all 
select b_created as x_created,NULL as a_data,b_data 
from table_b
order by 1

最新更新