【发布时间】:2015-12-08 10:51:51
【问题描述】:
我的查询一直返回 ORA-01427 错误,请问如何解决:
我有 3 个表:T1 有 (idA,B) 列,B 类型日期 T2 带 (idC,D) 列,D 类型 varchar T3 有 (idE,F,G,....) 列,F 类型日期,G 类型 varchar,idE(DBsquences),F 和 G 是主键。
我想将来自 T1 和 T2 的数据插入到 T3 中
我的查询:
insert into T3 (F, G) values ((select B from T1 where max(B)), ( select D from T2));
我得到:ORA-01427 错误单行子查询返回多行。
我怎样才能用光标做到这一点?
T1:
idA B
------------
1 date1
2 date2 (the max date)
3 date3
T2:
idC D
----------
1 x
2 y
3 z
. .
. .
. .
n N
Result must be:
T3:
idE F G
-----------------------
1 date2 y
2 date2 z
. . .
. . .
. . .
. . .
n date2 N
【问题讨论】:
-
这里一切都错了 :) 如果您从选择中插入值,则不需要
values关键字,但您应该只使用 1 个查询。它不是有效条件 -where max(B)。你不能在WHERE中使用组函数,只能在HAVING中使用。你应该做一个像max(B) = someting这样的条件 -
请您添加有关逻辑的信息:为什么
T3.G是 y 而不是 x 对于T3.ide的值为 1 。您不需要光标,您必须使用 T2 的简单查询和 T1 最大日期,然后使用insert into .. select。为什么不使用视图?
标签: sql oracle sql-insert