我有两个表 doctor ,* 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';
答案 0 :(得分:4)
你只需要一个带有子查询的IN
子句(甚至是=
)。
delete from patient where doc_id in
(select doc_id from doctor where doc_name = 'pardeep');
如果你使用IN
,那意味着你的子查询可以返回多个结果(所以可能有多个doc_id)。
如果使用=
,如果子查询返回多个结果,则查询将失败。
答案 1 :(得分:3)
你非常关闭。你必须首先告诉你删除什么,然后从哪些表中删除。
<强>
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 演示
旁注:考虑使用显式ANSI JOIN
语法而不是隐式(逗号)语法。