首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中从多个表中删除?

问如何在MySQL中从多个表中删除?
EN

Stack Overflow用户
提问于 2010-07-26 11:05:00
回答 7查看 218.5K关注 0票数 124

我正在尝试一次从几个表中删除。我做了一些研究,想出了这个

代码语言:javascript
复制
DELETE FROM `pets` p,
            `pets_activities` pa
      WHERE p.`order` > :order
        AND p.`pet_id` = :pet_id
        AND pa.`id` = p.`pet_id`

然而,我得到了这个错误

未捕获SQL1064:您的Database_Exception语法中有一个错误;请查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在'p,pets_activities页...

我从来没有做过交叉表删除,所以我没有经验,现在卡住了!

我做错了什么?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-07-12 05:56:34

在JOIN DELETE 语句中使用。

代码语言:javascript
复制
DELETE p, pa
      FROM pets p
      JOIN pets_activities pa ON pa.id = p.pet_id
     WHERE p.order > :order
       AND p.pet_id = :pet_id

或者,您可以使用...

代码语言:javascript
复制
DELETE pa
      FROM pets_activities pa
      JOIN pets p ON pa.id = p.pet_id
 WHERE p.order > :order
   AND p.pet_id = :pet_id

仅从pets_activities中删除...to

参见this。

对于单个表的删除,对于引用完整性,还有其他处理EXISTS、NOT EXISTS、IN、NOT IN等的方法。但是上面的方法是在FROM子句之前使用别名指定要从哪些表中删除,这可以更容易地让您摆脱一些相当紧张的地方。我倾向于在99%的情况下使用EXISTS,然后有1%的情况下使用这种MySQL语法。

票数 226
EN

Stack Overflow用户

发布于 2010-07-26 11:17:57

由于这似乎是pets和pets_activities之间的简单父/子关系,因此最好使用删除级联来创建外键约束。

这样,当删除pets行时,与其关联的pets_activities行也会自动删除。

那么你的查询就变成了一个简单的:

代码语言:javascript
复制
delete from `pets`
    where `order` > :order
      and `pet_id` = :pet_id
票数 21
EN

Stack Overflow用户

发布于 2015-02-20 13:08:34

使用这个

代码语言:javascript
复制
DELETE FROM `articles`, `comments` 
USING `articles`,`comments` 
WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4

或

代码语言:javascript
复制
DELETE `articles`, `comments` 
FROM `articles`, `comments` 
WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3331992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档