[英]Insert Statement Returns ORA-01427 Error While Trying To Insert From Multiple Tables
我有此表F_Flight,我正尝试从3个不同的表中插入该表。 第一,第四和第五列来自同一列,第二和第三列来自不同的表。 当我执行代码时,出现“单行子查询返回多个行”错误。
insert when 1 = 1 then into F_Flight (planeid, groupid, dateid, flightduration, kmsflown) values
(planeid, (select b.groupid from BridgeTable b where exists (select p.p1id from pilotkeylookup p where b.pilotid = p.p1id)),
(select dd.id from D_Date dd where exists (select p.launchtime from PilotKeyLookup p where dd."Date" = p.launchtime)),
flightduration, kmsflown) select * from PilotKeyLookup p;
您的子查询会返回多行,这就是错误消息所显示的内容。 您尝试插入到单行中的数据的各个位与子查询之间没有关联。
这可以通过简单得多的insert...select
操作来完成insert...select
通过连接进行insert...select
,例如:
insert into f_flight (planeid, groupid, dateid, flightduration, kmsflown)
select pkl.planeid, bt.groupid, dd.id, pkl.flightduration, pkl.kmsflown
from pilotkeylookup pkl
join bridgetable bt on bt.pilotid = pkl.p1id
join d_date dd on dd."Date" = pkl.launchtime;
这会将主PilotKeyLookup表连接到子查询中使用的其他两个键上。
存储一个ID值而不是一个实际日期是不寻常的,并且如果launchtime
时间具有时间成分(从名称d_date
可能很d_date
并且您的d_date
条目只是日期(即所有带有午夜时间的日期),那么您将找不到匹配项。 您可能需要执行以下操作:
join d_date dd on dd."Date" = trunc(pkl.launchtime);
似乎这也可能是一个视图,因为您要存储重复的数据f_flight
所有内容显然都可以从其他表中找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.