sql - 当 A 和 C 通过表 B 链接时,如何使用表 C 中的数据更新表 A
问题描述
我有三个表(A
、B
和C
),并且想用 in 中A.appointment_id
的值更新 null 值C.tc_appointment_id
。表A
,C
可以通过表连接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
。
解决方案
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;
注意子查询必须返回唯一的记录,否则会出现“子查询返回多行”之类的错误。鉴于您的样本数据,这似乎没问题。
推荐阅读
- php - 如何在 MYSQL 的同一 INSERT QUERY 的另一列中使用自动增量 ID?
- javascript -
HTML 标题中的标记会破坏 jQuery DataTables 中的 pdfmake 导出 - machine-learning - 有什么方法可以限制用openblas编译的pycaffe的CPU使用率?
- java - Java SHA1withRSA 验证总是假的,为什么?
- flutter - 如何在颤振测试中打开抽屉
- php - 如何使用服务器 IP 而不是用户 IP 将用户重定向到 API 端点(不同的域)?
- ruby-on-rails - Capybara::ElementNotFound: 找不到 css "#transaction_form"
- c# - 获取用户注册的来源/引荐来源网址
- oop - 在 OOP 中封装集合的顺序
- php - PHPMailer 链接问题