错误:ORA-01789:查询块的结果列数不正确
Posted
技术标签:
【中文标题】错误:ORA-01789:查询块的结果列数不正确【英文标题】:Error: ORA-01789: query block has incorrect number of result columns 【发布时间】:2012-11-26 06:49:48 【问题描述】:我有两个关系视图。
第一个视图:
CREATE VIEW VIEW1
AS
SELECT T#,
MAX(DECODE(LEG#,1,DEPARTURE)) ORIGIN,
MAX(DECODE(LEG#,1,DESTINATION)) DESTINATION1
FROM TRIPLEG
WHERE T# IN
(SELECT T# FROM TRIPLEG WHERE LEG# < 3
AND T# IN
(SELECT T# FROM TRIPLEG GROUP BY T#
HAVING COUNT(T#) < 3)
GROUP BY T#)
GROUP BY T#
ORDER BY T#;
第二个视图:
CREATE VIEW VIEW2
AS
SELECT T#,
MAX(DECODE(LEG#,2,DESTINATION)) DESTINATION1
FROM TRIPLEG
WHERE T# IN
(SELECT T# FROM TRIPLEG WHERE LEG# < 3
AND T# IN
(SELECT T# FROM TRIPLEG GROUP BY T#
HAVING COUNT(T#) < 3)
GROUP BY T#)
GROUP BY T#
ORDER BY T#;
我用 从 VIEW1 中选择 * 联合所有 从 VIEW2 中选择 *
我得到了错误 ORA-01789。
我想要实现的是
T# | ORIGIN | DESTINATION1 | DESTINATION2
------------------------------------------------------
1 abc efg hij
我创建的视图是否被视为关系视图?
【问题讨论】:
【参考方案1】:两个视图必须具有相同的列数才能执行 UNION ALL。看Oracle参考:The UNION ALL, INTERSECT, MINUS Operators
【讨论】:
【参考方案2】:我认为您想要一个 INNER JOIN
而不是 UNION ALL
。以下内容有帮助吗?
SELECT v1.T#, v1.ORIGIN, v1.DESTINATION1, v2.DESTINATION2
FROM VIEW1 v1
INNER JOIN VIEW2 v2 ON v1.T# = v2.T#
(我假设您的视图VIEW2
有一个名为DESTINATION2
的列,而不是上面写的DESTINATION1
。)
如果您从VIEW1
中删除了ORIGIN
列,则可以运行SELECT * FROM VIEW1 UNION ALL SELECT * FROM VIEW2
,但这会给您以下输出:
T# | DESTINATION1
---------------------
1 | efg
1 | hij
原因是UNION ALL
只是将行附加在一起,而不是合并它们。如果VIEW1
仍然有它的ORIGIN
列,Oracle 将无法附加这些行来创建一组行,因为有些行中包含三个值,而另一些行中包含两个值。
【讨论】:
以上是关于错误:ORA-01789:查询块的结果列数不正确的主要内容,如果未能解决你的问题,请参考以下文章
ORA-01789: query block has incorrect number of result columns