1. 应用情境
想把order_records表中的所有记录的doctor_id都改成doctor_name对应的医生id(在doctor表中)。
update order_records set doctor_id =
(select id from doctor where doctor.doctor_name =order_records.doctor_name);
P.S. doctor_name非order_records表的外键,即非doctor表的主键,但当前默认唯一。
2. Error分析
子查询返回1条以上的结果,而主查询只能接受一条返回(set xx = ...)。(主查询的一条记录对应子查询多条记录产生错误)
3. 解决办法
update order_records set doctor_id =
(select id from doctor where doctor.doctor_name =order_records.doctor_name LIMIT 1);
用 LIMIT 1 限定只返回匹配的第一个结果。