Попытка обновить отдельные записи и проблемы с выяснением, как это сделать - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь обновить набор отдельных записей в базе данных 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;

Я попытался сделать это несколькими способами:

Попытка 1:

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%');

Я продолжаю получать ошибки, не повезло, когда я пытался выяснить, как обновить это. Любые идеи или предложения будут очень цениться. Спасибо Крис

1 Ответ

0 голосов
/ 27 апреля 2020

Вы можете попытаться уклониться от условия DISTINCT в подзапросе where is *

        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%'

        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...