簡體   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