Как я могу обновить таблицу A данными из таблицы C, когда A и C связаны через таблицу B - PullRequest
2 голосов
/ 03 апреля 2019

У меня есть три таблицы (A, B и C), и я хотел бы обновить нулевые значения в A.appointment_id значениями в C.tc_appointment_id. Таблицы A и C могут быть объединены через таблицу B. Синие стрелки представляют соединения, красная стрелка - обновление, которого я пытаюсь достичь.

Visual

Я могу объединить три таблицы вместе и попытался изменить свое предложение select в обновлении. Следуют мои успешные операторы выбора и неудачные обновления.

--Working select

select A.tc_ASN_id,A.appointment_id, B.appt_obj_id, B.appointment_id, C.appointment_id, C.tc_appointment_id from B
join A on B.appt_obj_id = A.asn_id
join C on C.appointment_id = B.appointment_id
where C.appt_status < '9' and A.appointment_id is null;

--Update attempt that ends with SQL Error: ORA-00933: SQL command not properly ended

update asn set appoinmtent_id = ilm_appointments.tc_appointment_id
join ilm_appointment_objects on ilm_appointment_objects.appt_obj_id = asn.asn_id
join ilm_appointments on ilm_appointments.appointment_id = ilm_appointment_objects.appointment_id
where ilm_appointments.appt_status < '9' and asn.appointment_id is null;

Ожидаемый результат - обновить все null значения для A.appointment_id, чтобы они обновлялись значениями из C.tc_appointment_id.

1 Ответ

1 голос
/ 03 апреля 2019
Синтаксис

UPDATE...JOIN не поддерживается в Oracle.Вместо этого вы можете использовать коррелированный подзапрос.

Учтите:

UPDATE A
SET A.appointment_id = (
    SELECT C.tc_appointment_id
    FROM B
    INNER JOIN C ON C.appointment_id = B.appointment_id
    WHERE B.appt_obj_id = A.asn_id
)
WHERE A.appointment_id IS NULL;

Остерегайтесь того, что подзапрос должен возвращать уникальную запись, в противном случае вы получите ошибку типа "подзапрос"вернул более одного ряда ".Учитывая ваши данные выборки, похоже, все в порядке.

...