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