使用两个表上的连接从一个表中删除

时间:2013-09-01 07:42:42

标签: mysql sql

我有两个表 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';

2 个答案:

答案 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语法而不是隐式(逗号)语法。