【问题标题】:DELETE with multiple JOIN in MySQL?在 MySQL 中使用多个 JOIN 删除?
【发布时间】:2020-05-25 16:52:56
【问题描述】:

我有一个包含多个 JOIN 的 SELECT 查询,效果很好,但现在我想删除这些行,但我找不到方法。 此代码返回一个错误 SQL (1064):

DELETE FROM rapport
INNER JOIN course ON rapport.course_id = course.id
INNER JOIN reunion ON course.reunion_id  = reunion.id
INNER JOIN paris ON rapport.paris_id = paris.id 
WHERE reunion.id = 231431
AND paris.bookmaker_id = 3

我需要帮助,谢谢

【问题讨论】:

    标签: mysql sql join sql-delete


    【解决方案1】:

    您的语法错误。
    也可以将其与别名一起使用:

    DELETE r
    FROM rapport r
    INNER JOIN course c ON r.course_id = c.id
    INNER JOIN reunion u ON c.reunion_id  = u.id
    INNER JOIN paris p ON r.paris_id = p.id 
    WHERE u.id = 231431 AND p.bookmaker_id = 3
    

    如果要从所有表中删除,则必须在 DELETE 之后指定它们的别名:

    DELETE r, c, u, p
    FROM rapport r
    INNER JOIN course c ON r.course_id = c.id
    INNER JOIN reunion u ON c.reunion_id  = u.id
    INNER JOIN paris p ON r.paris_id = p.id 
    WHERE u.id = 231431 AND p.bookmaker_id = 3
    

    【讨论】:

    • 谢谢,就是这样。
    【解决方案2】:

    基本上,您需要指定要从哪个表中删除。假设这是rapport

    DELETE r
        FROM rapport r JOIN
             course c
             ON r.course_id = c.id JOIN
             reunion ru 
             ON c.reunion_id  = ru.id JOIN
             paris p 
             ON r.paris_id = p.id 
        WHERE ru.id = 231431 AND p.bookmaker_id = 3;
    

    MySQL 还支持从多个表中删除。但是,级联约束通常是更好的方法。

    【讨论】:

    • 谢谢,这很好,除了第 8 行 (rapport.paris_id -> r.paris_id)
    猜你喜欢
    • 2010-10-13
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多