mysql - 如何从 MySQL 中的多个表中删除?

标签 mysql sql mysql-error-1064 sql-delete

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

DELETE FROM `pets` p,
            `pets_activities` pa
      WHERE p.`order` > :order
        AND p.`pet_id` = :pet_id
        AND pa.`id` = p.`pet_id`

但是,我收到了这个错误

Uncaught Database_Exception [ 1064 ]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'p, pets_activities pa...

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

我做错了什么?

最佳答案

DELETE 语句中使用 JOIN

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

您也可以使用...

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

中删除

this .

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

关于mysql - 如何从 MySQL 中的多个表中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3331992/

相关文章:

java - sql select 错误

sql - 安装脚本MySQL语法错误 "You have an error in your SQL syntax; [...] "

在语句末尾使用 "IDENFIFIED BY "时出现 mysql 错误

mysql - Hibernate Schema 更新问题

php - 从数据库中选择数据并在 MYSQL 中创建新列

java - 如何将 ORDER BY LENGTH(test) DESC 编写为 Criteria 查询?

sql - 使用正则表达式 Oracle

php - 从数据库中对用户进行分组

mysql - 将列合并为 mysql View 中的单个列

mysql - 声明变量时 MySQL 存储过程中的语法错误