1

我有两个带有 *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';
4

2 回答 2

4

你可以只是一个带有子查询的IN子句(甚至 )。=

delete from patient where doc_id in 
 (select doc_id from doctor where doc_name = 'pardeep');

如果您使用IN,则意味着您的子查询可以返回多个结果(因此可能返回多个 doc_id)。

如果您使用=,如果子查询返回多个结果,您的查询将失败。

于 2013-09-01T07:44:14.113 回答
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演示

附带说明:考虑使用显式 ANSIJOIN语法而不是隐式(逗号)语法。

于 2013-09-01T07:46:12.207 回答