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)
我怎样才能达到预期的效果?
如果没有数据相关且甚至不共享列,人们会质疑为什么要在单个查询中执行此操作.但无论如何,您必须指定所有列:
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)
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |