【问题标题】:ORA-01427 error , insert into all rowsORA-01427 错误,插入所有行
【发布时间】: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


【解决方案1】:

如果我没听错的话:

INSERT INTO T3 (F, G)
SELECT  (select max(B) from T1), D
FROM T2

如果从 select 中插入值,则不需要 values 关键字,但应该只使用 1 个查询。它不是有效条件 - where max(B)。你不能在WHERE 中使用组函数,只能在HAVING 中使用。您应该创建一个类似max(B) = something 的条件。如果你想选择最大值,你只需使用SELECT中的max函数

【讨论】:

  • 谢谢 Tatiana,我了解从表中插入数据的正确方法,不需要输入 VALUES
猜你喜欢
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2014-06-24
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
相关资源
最近更新 更多