我正试图更新Oracle 11g数据库中的一组不同记录,但遇到了一点小麻烦。我能够选择我要更新的记录没有问题,但在尝试更新时却一直遇到问题。
为了选择我要更新的记录,我可以用这个查询来选择它们。
select distinct p.irp_pla_platenbr, v.irp_veh_vin, v.irp_veh_titlenbr, vd.vin, vd.vehicle_unique, vd.title_number, vd.plate_reg, vd.year_reg, p.irp_pla_year, p.irp_pla_status
from irp.irp_vehicles v
inner join irp.irp_fleetvehicleregistration fvr on fvr.irp_fvr_vehicleid = v.irp_veh_id
inner join irp.irp_plates p on p.irp_pla_vehicleid = fvr.irp_fvr_vehicleid and p.irp_pla_status = 'A'
inner join VINDECODE.veh_2019 vd on vd.title_number = v.irp_veh_titlenbr
where v.irp_veh_regdate >= '01-NOV-19'
and p.irp_pla_platenbr <> vd.plate_reg
and vd.plate_reg like 'A%'
从这里,我想更新这组不同的记录 通过设置p. irp_pla_platenbr = vd. plate_reg;
我尝试了几种方法。
尝试一:
UPDATE
(
select distinct p.irp_pla_platenbr, v.irp_veh_vin, v.irp_veh_titlenbr, vd.vin, vd.vehicle_unique, vd.title_number, vd.plate_reg, vd.year_reg, p.irp_pla_year, p.irp_pla_status
from irp.irp_vehicles v
inner join irp.irp_fleetvehicleregistration fvr on fvr.irp_fvr_vehicleid = v.irp_veh_id
inner join irp.irp_plates p on p.irp_pla_vehicleid = fvr.irp_fvr_vehicleid and p.irp_pla_status = 'A'
inner join VINDECODE.veh_2019 vd on vd.title_number = v.irp_veh_titlenbr
where v.irp_veh_regdate >= '01-NOV-19'
and p.irp_pla_platenbr <> vd.plate_reg
and vd.plate_reg like 'A%'
)
set p.irp_pla_platenbr = vd.plate_reg;
尝试2:
update irp_plates set irp_pla_platenbr =
(select vd.plate_reg
from irp.irp_vehicles v
inner join irp.irp_fleetvehicleregistration fvr on fvr.irp_fvr_vehicleid = v.irp_veh_id
inner join irp.irp_plates p on p.irp_pla_vehicleid = fvr.irp_fvr_vehicleid and p.irp_pla_status = 'A'
inner join VINDECODE.veh_2019 vd on vd.title_number = v.irp_veh_titlenbr
where v.irp_veh_regdate >= '01-NOV-19'
and p.irp_pla_platenbr <> vd.plate_reg
and vd.plate_reg like 'A%')
where exists
(select distinct p.irp_pla_platenbr, v.irp_veh_vin, v.irp_veh_titlenbr, vd.vin, vd.vehicle_unique, vd.title_number, vd.plate_reg, vd.year_reg, p.irp_pla_year, p.irp_pla_status
from irp_vehicles v
inner join irp.irp_fleetvehicleregistration fvr on fvr.irp_fvr_vehicleid = v.irp_veh_id
inner join irp.irp_plates p on p.irp_pla_vehicleid = fvr.irp_fvr_vehicleid and p.irp_pla_status = 'A'
inner join VINDECODE.veh_2019 vd on vd.title_number = v.irp_veh_titlenbr
where v.irp_veh_regdate >= '01-NOV-19'
and p.irp_pla_platenbr <> vd.plate_reg
and vd.plate_reg like 'A%');
我一直收到错误信息,还没有找到更新的方法 任何想法或建议都将是非常感激的,ThanksChris。
你可以尝试在where existes子查询中避免使用DISTINCT子句。
UPDATE irp.irp_plates p
SET p.irp_pla_platenbr = (
select vd.plate_reg
from irp.irp_vehicles v
inner join irp.irp_fleetvehicleregistration fvr on fvr.irp_fvr_vehicleid = v.irp_veh_id
inner join irp.irp_plates p on p.irp_pla_vehicleid = fvr.irp_fvr_vehicleid and p.irp_pla_status = 'A'
inner join VINDECODE.veh_2019 vd on vd.title_number = v.irp_veh_titlenbr
where v.irp_veh_regdate >= '01-NOV-19'
and p.irp_pla_platenbr <> vd.plate_reg
and vd.plate_reg like 'A%'
)
WHERE EXISTS (
select vd.plate_reg
from irp.irp_vehicles v
inner join irp.irp_fleetvehicleregistration fvr on fvr.irp_fvr_vehicleid = v.irp_veh_id
inner join irp.irp_plates p on p.irp_pla_vehicleid = fvr.irp_fvr_vehicleid and p.irp_pla_status = 'A'
inner join VINDECODE.veh_2019 vd on vd.title_number = v.irp_veh_titlenbr
where v.irp_veh_regdate >= '01-NOV-19'
and p.irp_pla_platenbr <> vd.plate_reg
and vd.plate_reg like 'A%'
)