我试图一次从几个表中删除 . 我做了一些研究,想出了这个
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]:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在'p,pets_activities pa ...附近使用正确的语法
我以前从来没有做过十字表删除,所以我现在没经验并且卡住了!
我究竟做错了什么?
6 回答
Use a JOIN in the DELETE statement.
或者你可以使用......
...仅从pets_activities中删除
见http://dev.mysql.com/doc/refman/5.0/en/delete.html
对于单表删除,但具有引用完整性,还有其他方法可以使用EXISTS,NOT EXISTS,IN,NOT IN等 . 但是上面的那个用于指定在FROM子句可以获取之前使用别名从哪些表中删除的表你更容易从一些非常紧张的地方出来 . 我倾向于在99%的情况下与EXISTS联系,然后这个MySQL语法占用了当天的1% .
由于这似乎是
pets
和pets_activities
之间的简单父/子关系,因此最好使用删除级联创建外键约束 .这样,当删除
pets
行时,与其关联的pets_activities
行也会自动删除 .然后您的查询变得简单:
用这个
要么
语法看起来对我来说...尝试将其更改为使用INNER JOIN ...
看看这个:http://www.electrictoolbox.com/article/mysql/cross-table-delete/
我目前没有要测试的mysql数据库,但您是否尝试在from子句之前指定要删除的内容?例如:
我认为您使用的语法仅限于较新版本的mysql .
对于2017年阅读此内容的人来说,这就是我做类似的事情 .
通常,要从多个表中删除行,下面给出了我遵循的语法 . 该解决方案基于两个表之间存在某种关系的假设 .