Oracle,从子查询中插入多行以及多行

时间:2012-10-05 06:31:49

标签: oracle select insert row multirow

我试图将某个字段从表复制到其他字段,我想通过使用带有这样的子查询的插入来执行此操作:

insert into sed_reporte_generico 
(srg_usuario, 
srg_nombres,
srg_ape_paterno,
srg_ape_materno,
srg_objetivo,
srg_peso_ob,
srg_calf_ob)
values
(
(select us.su_st_usuario, us.su_st_nombres, us.su_st_ap_paterno, us.su_st_ap_materno,     ob.soc_st_descripcion, ob.soc_nr_peso,ob.soc_nr_calificacion 
from sed_objetivo ob, sed_usuarios us, sed_evaluacion ev 
where ob.se_evaluacion_pk = ev.se_evaluacion_pk and ev.su_colaborador_fk =     us.su_usuarios_pk)
);

但是我收到了这个错误:

01427. 00000 -  "single-row subquery returns more than one row"

任何想法我应该怎么做?

谢谢,

1 个答案:

答案 0 :(得分:10)

认为你必须在

之间做出选择
insert into table (a, b, c) VALUES(1, 2, 3)

insert into table (a, b, c) 
(SELECT x, y, z from table2)

你可以只使用VALUES和SELECT混合(如anomyous horse指出) 当您的选择查询只返回一列和一行时!

顺便说一句,使用JOIN ...来加入你的表(使用WHERE子句连接表是一个坏习惯):

INSERT INTO sed_reporte_generico 
(srg_usuario, 
srg_nombres,
srg_ape_paterno,
srg_ape_materno,
srg_objetivo,
srg_peso_ob,
srg_calf_ob)

(select us.su_st_usuario, us.su_st_nombres, us.su_st_ap_paterno, us.su_st_ap_materno,     ob.soc_st_descripcion, ob.soc_nr_peso,ob.soc_nr_calificacion 
FROM sed_objetivo ob 
JOIN sed_evaluacion ev  ON ob.se_evaluacion_pk = ev.se_evaluacion_pk
JOIN sed_usuarios us on  ev.su_colaborador_fk =     us.su_usuarios_pk)
);