【问题标题】:Delete from one table using join on two tables在两个表上使用连接从一个表中删除
【发布时间】:2013-09-01 15:57:57
【问题描述】:

我有两个表 doctor 带有 *doc_id* 和 *doc_name* 和 patient 带有 *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';

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以只使用带有子查询的 IN 子句(甚至是 = )。

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

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

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

    【讨论】:

    • 也许你应该警告装腔作势的人不要使用 IN 而不是 =
    • 我知道了,但是我特别想用join。
    【解决方案2】:

    非常非常接近。你必须告诉你先删除什么,然后从哪些表中删除。

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

    【讨论】:

    • :) 是的@peterm 我现在明白了。
    • 太棒了。我很高兴能帮上忙:)
    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 2016-07-09
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多