我试图一次从几个表中删除。我做了一些研究,得出了这个结论
DELETE FROM `pets` p,
`pets_activities` pa
WHERE p.`order` > :order
AND p.`pet_id` = :pet_id
AND pa.`id` = p.`pet_id`
然而,我得到了这个错误
未捕获的数据库异常[1064]:您的sql语法有错误;查看与您的mysql服务器版本对应的手册,以获得使用“p”附近的正确语法, pets_activities
帕。。。
我从来没有做过跨表删除之前,所以我没有经验,并停留在现在!
我做错什么了?
7条答案
按热度按时间rjzwgtxy1#
对2017年读到这篇文章的人来说,我就是这样做的。
通常,要从多个表中删除行,下面给出了我遵循的语法。该解决方案基于两个表之间存在某种关系的假设。
dly7yett2#
我目前没有mysql数据库可供测试,但您是否尝试过在from子句之前指定要删除的内容?例如:
我认为您使用的语法仅限于较新版本的mysql。
xmq68pz93#
使用
JOIN
在DELETE
声明。或者你可以使用。。。
…仅从中删除
pets_activities
看看这个。对于单表删除,但具有引用完整性的情况下,还有其他处理方法
EXISTS
,NOT EXISTS
,IN
,NOT IN
等等,但在上面的一个表中,您可以在FROM
从句可以让你更容易地摆脱一些相当棘手的问题。我倾向于接触一个EXISTS
在99%的情况下,还有1%的情况下,这种mysql语法需要一天的时间。qeeaahzv4#
我发现这篇文章向您展示了如何使用mysql delete join语句从多个表中删除数据,并给出了很好的解释。
alen0pnh5#
用这个
或者
mwecs4sa6#
语法在我看来是正确的。。。试着把它改成
INNER JOIN
...看看这个。
ilmyapht7#
因为这似乎是一个简单的父/子关系
pets
以及pets_activities
,最好使用删除级联创建外键约束。那样的话,当
pets
行被删除,则pets_activities
与之关联的行也会自动删除。然后,您的查询变得简单: