Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当A和C通过表B链接时,如何使用表C中的数据更新表A_Sql_Oracle_Oracle Sqldeveloper - Fatal编程技术网

Sql 当A和C通过表B链接时,如何使用表C中的数据更新表A

Sql 当A和C通过表B链接时,如何使用表C中的数据更新表A,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,我有三个表(A、B和C),我想用C.tc\u约会id中的值更新A.appointment\u id中的空值。表A和C可以通过表B连接。蓝色箭头表示连接,红色箭头表示我试图实现的更新 我能够将三个表连接在一起,并尝试将select语句修改为更新。下面是我成功的select语句和不成功的更新 --Working select select A.tc_ASN_id,A.appointment_id, B.appt_obj_id, B.appointment_id, C.appointment_id

我有三个表(
A
B
C
),我想用
C.tc\u约会id
中的值更新
A.appointment\u id
中的空值。表
A
C
可以通过表
B
连接。蓝色箭头表示连接,红色箭头表示我试图实现的更新

我能够将三个表连接在一起,并尝试将select语句修改为更新。下面是我成功的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;
——工作选择
从B中选择A.tc\U ASN\U id、A.appointment\U id、B.appt\U obj\U id、B.appointment\U id、C.appointment\U id、C.tc\U appointment\U id
在B.appt_obj_id=A.asn_id上加入A
在C.appointment\u id=B.appointment\u id上加入C
其中C.appt_status<'9'和A.appointment_id为空;
--以SQL错误结束的更新尝试:ORA-00933:SQL命令未正确结束
更新asn set appointment\u id=ilm\u appoints.tc\u appointment\u id
在ilm\u约会\u对象上加入ilm\u约会\u对象。appt\u obj\u id=asn.asn\u id
在ilm_约会上加入ilm_约会。约会id=ilm_约会对象。约会id
其中ilm_appointment.appt_状态<'9',asn.appointment_id为空;

预期结果是更新
A.appointment\u id
的所有
null
值,以使用
C.tc\u appointment\u id
中的值进行更新。Oracle不支持JOIN语法。您可以改用相关子查询

考虑:

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;
请注意,子查询必须返回唯一的记录,否则将出现类似“子查询返回多行”的错误。根据您的示例数据,这似乎是正确的