我有两个带有 *doc_id* 和 *doc_name* 的表医生和带有 *p_id* *doc_id* 外键和 *p_name* 的患者,我想删除与 doc_name='pardeep' 匹配的患者的所有记录,在这里是我的查询
DELETE FROM `doctor` , `patient` WHERE
doctor.doc_id=patient.doc_id and doctor.doc_name='pardeep';
你可以只是一个带有子查询的IN
子句(甚至 )。=
delete from patient where doc_id in
(select doc_id from doctor where doc_name = 'pardeep');
如果您使用IN
,则意味着您的子查询可以返回多个结果(因此可能返回多个 doc_id)。
如果您使用=
,如果子查询返回多个结果,您的查询将失败。
你非常亲近。您必须先告诉您删除什么,然后再从哪些表中删除。
DELETE Syntax
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
正确的查询可能如下所示
DELETE p
FROM patient p JOIN doctor d
ON p.doc_id = d.doc_id
WHERE d.doc_name = 'pardeep';
这是SQLFiddle演示
附带说明:考虑使用显式 ANSIJOIN
语法而不是隐式(逗号)语法。