繁体   English   中英

插入语句尝试从多个表中插入时返回ORA-01427错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM