2016-03-15 71 views
0

在下面的代码中,我尝试将表中的内容复制到除一列之外的另一列。对于那个特定的列,我想从第三个表中插入一个值,其中来自不同表的两列匹配。将整个表复制到另一个除了在Oracle中的一列之外

insert into PlaneKeyLookup (launchtime, landingtime, flightduration, 
       planeid, pilot1init, pilot2init, launchtype, kmsflown) values 
((select launchtime from NewFlightsTransformed), 
(select landingtime from NewFlightsTransformed), 
(select flightduration from NewFlightsTransformed), 
(select dp.id from D_Plane dp where exists 
    (select nf.planeregistration from NewFlightsTransformed 
    where dp.registration = nf.planeregistration)), 
(select pilot1init from NewFlightsTransformed), 
(select pilot2init from NewFlightsTransformed), 
(select launchtype from NewFlightsTransformed), 
(select kmsflown from NewFlightsTransformed)); 

有什么建议吗?

回答

0

你想会更喜欢的SQL:

insert into PlaneKeyLookup (launchtime, landingtime, flightduration, 
       planeid, pilot1init, pilot2init, launchtype, kmsflown) 
select launchtime, 
     landingtime, 
     flightduration, 
     (select dp.id from D_Plane dp where...), 
     pilot1init, 
     pilot2init, 
     launchtype, 
     kmsflown 
    from NewFlightsTransformed; 

我不知道到底是为planeid查询应该是什么,但它必须返回1行,让你wnat的ID为NewFlightsTransformed行它随之而来。它可以是相关与外部查询如果需要的话(可能):

(select dp.id from D_Plane dp 
    where dp.xxx = NewFlightsTransformed.xxx 
    and ...) 

也许:

(select dp.id from D_Plane dp where dp.registration = nf.planeregistration) 

insert into PlaneKeyLookup (launchtime, landingtime, flightduration, 
       planeid, pilot1init, pilot2init, launchtype, kmsflown) 
select launchtime, 
     landingtime, 
     flightduration, 
     (select dp.id from D_Plane dp where dp.registration = nf.planeregistration), 
     pilot1init, 
     pilot2init, 
     launchtype, 
     kmsflown 
    from NewFlightsTransformed nf; 
+0

,我已经想出了为select语句这:从D_Plane dp中选择dp.id在存在的情况下(从NewFlightsTransformed nf中选择nf.planeregistration,其中dp.registration = nf.planeregistration)。它工作如果我自己执行它,但与插入语句,它显示一个单行子查询返回多个行错误。它应该如何正确完成? – Istvan

+0

查看更新的答案。 –

+0

它的工作,非常感谢! – Istvan

相关问题