UNION SELECT不显示所有列

Sna*_*Doc 0 mysql sql union join view

我有几个VIEWs嵌套到一个更大的VIEW用作报告.

CREATE VIEW view1 AS
    SELECT table1.col1 AS t1c1, table1.col2 AS t1c2
    FROM table1
    WHERE table1.col1 = 0
;

SAMPLE OUTPUT:

SELECT * FROM view1;
+-------------------+
|  t1c1  |   t1c2   |
+--------+----------+
|    0   |  t1stuff |
+--------+----------+
|    0   | t1stuff2 |
+--------+----------+
Run Code Online (Sandbox Code Playgroud)

.

CREATE VIEW view2 AS
    SELECT table2.col1 AS t2c1, table2.col2 AS t2c2
    FROM table2
    WHERE table2.col1 = 5
;

SAMPLE OUTPUT:

SELECT * FROM view2;
+-------------------+
|  t2c1  |   t2c2   |
+--------+----------+
|    5   |  t2stuff |
+--------+----------+
|    5   | t2stuff2 |
+--------+----------+
Run Code Online (Sandbox Code Playgroud)

.

然后我将它们组合成一个"报告"视图,如下所示:

CREATE VIEW view3 AS
    SELECT * FROM view1
    UNION
    SELECT * FROM view2
;

SAMPLE OUTPUT:
SELECT * FROM view3;
+-------------------+
|  t1c1  |   t1c2   |
+--------+----------+
|    0   |  t1stuff |
+--------+----------+
|    0   | t1stuff2 |
+--------+----------+
|    5   |  t2stuff |
+--------+----------+
|    5   | t2stuff2 |
+--------+----------+
Run Code Online (Sandbox Code Playgroud)

INSTEAD的预期:

+-------------------+--------+----------+
|  t1c1  |   t1c2   |  t2c1  |   t2c2   |
+--------+----------+--------+----------+
|    0   |  t1stuff |        |          |
+--------+----------+--------+----------+
|    0   | t1stuff2 |        |          |
+--------+----------+--------+----------+
|        |          |   5    | t2stuff  |
+--------+----------+--------+----------+
|        |          |   5    | t2stuff2 |
+--------+----------+--------+----------+
Run Code Online (Sandbox Code Playgroud)

我怎样才能达到预期的效果?

lc.*_*lc. 5

如果没有数据相关且甚至不共享列,人们会质疑为什么要在单个查询中执行此操作.但无论如何,您必须指定所有列:

select col1 as t1c1, col2 as t1c2, null as t2c1, null as t2c2
from view1
union all
select null as t1c1, null as t1c2, col1 as t2c1, col2 as t2c2
from view2
Run Code Online (Sandbox Code Playgroud)