首页 > 解决方案 > 当 A 和 C 通过表 B 链接时,如何使用表 C 中的数据更新表 A

问题描述

我有三个表(ABC),并且想用 in 中A.appointment_id的值更新 null 值C.tc_appointment_id。表AC可以通过表连接B。蓝色箭头代表连接,红色箭头代表我想要实现的更新。

视觉的

我能够将三个表连接在一起,并尝试将我的 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

标签: sqloracleoracle-sqldeveloper

解决方案


UPDATE...JOINOracle 不支持语法。您可以改用相关子查询。

考虑:

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;

注意子查询必须返回唯一的记录,否则会出现“子查询返回多行”之类的错误。鉴于您的样本数据,这似乎没问题。


推荐阅读