【发布时间】:2014-08-24 23:26:55
【问题描述】:
我有几个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 |
+--------+----------+
.
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 |
+--------+----------+
.
然后我将它们组合成一个“报告”视图,如下所示:
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 |
+--------+----------+
代替预期:
+-------------------+--------+----------+
| t1c1 | t1c2 | t2c1 | t2c2 |
+--------+----------+--------+----------+
| 0 | t1stuff | | |
+--------+----------+--------+----------+
| 0 | t1stuff2 | | |
+--------+----------+--------+----------+
| | | 5 | t2stuff |
+--------+----------+--------+----------+
| | | 5 | t2stuff2 |
+--------+----------+--------+----------+
我怎样才能达到预期的效果?
【问题讨论】:
-
UNION和UNION ALL集合运算符根据每个集合中的列位置组合集合。就集合中的列数和每列的数据类型而言,组合的每个集合都必须“匹配”。 (列的名称并不重要;生成的组合集中的列的名称是从第一个集合派生的。)在您的示例中,UNION运算符正在按照规范执行请求的操作。跨度>