【问题标题】:Multiple delete statements with single query带有单个查询的多个删除语句
【发布时间】:2015-07-02 02:43:37
【问题描述】:

给定两个表photoskeywords,其中photos.ID = keywords.photos,如何在一个查询中从两个表中删除相同的行? photos 表有一条记录,而keywords 有 9 条对photos 记录的引用。

我试过了

DELETE FROM photos 
INNER JOIN keywords ON photos.ID = keywords.photo 
WHERE photos.ID = 262;

我收到错误 1064,说明从 INNER JOIN keywords 开始存在错误,并在语句的其余部分继续。

但是,当我将 DELETE 语句转换为 SELECT * 通过时

SELECT * FROM photos
INNER JOIN keywords ON photos.ID = keywords.photo
WHERE photos.ID = 262;

,我得到一组 9 行返回。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您需要添加要删除的表的名称

    DELETE photos 
    FROM photos 
         INNER JOIN keywords ON photos.ID = keywords.photo 
    WHERE photos.ID = 262;
    

    【讨论】:

    • 成功了!为什么表限定符需要包含在此语句中,而不是正常的DELETE 用法?
    • 因为它涉及多个表,这就是为什么您需要指定删除记录的位置。 :D
    【解决方案2】:

    您不能从多个表中显式删除。

    但是,如果keywords.photos 与photos.id 外键为“on delete cascade”,则当您从照片中删除时,它们将被删除

    【讨论】:

    • 不幸的是,我必须为这个表使用 MyISAM 引擎,这意味着不支持外键。因此在我的代码中实现相同逻辑的必要性。
    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 2022-01-20
    • 2012-01-28
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2012-06-27
    相关资源
    最近更新 更多