3

テーブルから他のフィールドにフィールドをコピーしようとしていますが、次のようなサブクエリで挿入を使用して iy を実行したいと考えています。

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 - "単一行のサブクエリが複数の行を返す"

どうすればいいですか?

ありがとう、

4

1 に答える 1

12

どちらかを選択する必要があると思います

insert into table (a, b, c) VALUES(1, 2, 3)

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

SELECT クエリが 1 つの列と 1 つの行のみを返す場合、VALUES と SELECT のみを混在させることができます (無名の馬が指摘するように)。

ところで、テーブルを結合するには 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)
);
于 2012-10-05T06:35:50.903 に答える