Erro ORA-01427:单行子查询返回多行

时间:2014-11-06 14:58:44

标签: oracle

我正在使用case语句和子查询创建一个视图,它被执行并显示

ORA-01427 "single-row subquery returns more than one row"

如何只返回一行来修复它?

CREATE OR REPLACE FORCE VIEW AAAA("BB",  "CC") AS
SELECT T1.C1, 
CASE WHEN T2.C1='RED' THEN (SELECT COLOR_RED FROM T1 )
     WHEN T2.C1='GREEN' THEN (SELECT COLOR_GREEN FROM T1)
     WHEN T2.C1='BLUE' THEN (SELECT COLOR_BLUE FROM T1)
ELSE NULL END
FROM T1, T2;

2 个答案:

答案 0 :(得分:0)

将查询更改为使用IN或ANY与子查询结果。

答案 1 :(得分:0)

导致编译/运行时异常的编码错误是您正在执行内联子查询,该子查询必须只返回一个值才能工作,但表(T1)中有多一行。您的子查询必须在主键或唯一索引的列值组合上具有WHERE子句,否则T1表不能包含多行。 另外,您是否打算将T1中的每一行与T2中的每一行相结合并相乘?您的SELECT语句不包含连接条件。如果T1包含1,000行而T2包含2,000行,那么您的视图将返回2,000,000条记录。 Google“SQL Cartesian产品”或“SQL Cross Join”。