试图更新不同的记录,但不知道如何做。

问题描述 投票:-1回答:1

我正试图更新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。

sql oracle distinct updates
1个回答
0
投票

你可以尝试在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%'

        )
© www.soinside.com 2019 - 2024. All rights reserved.