ale*_*lex 109 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`
Run Code Online (Sandbox Code Playgroud)
但是,我收到了这个错误
Uncaught Database_Exception [1064]:您的SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在'p,
pets_activitiespa ... 附近使用正确的语法
我以前从来没有做过十字表删除,所以我现在没经验并且卡住了!
我究竟做错了什么?
小智 194
JOIN在DELETE声明中使用a .
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
Run Code Online (Sandbox Code Playgroud)
或者你可以使用......
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
Run Code Online (Sandbox Code Playgroud)
...仅从pets_activities中删除
请参阅http://dev.mysql.com/doc/refman/5.0/en/delete.html
对于单表删除,但具有引用完整性,还有其他方法可以使用EXISTS,NOT EXISTS,IN,NOT IN等.但是上面的那个用于指定在FROM子句可以获取之前使用别名从哪些表中删除的表你更容易从一些非常紧张的地方出来.我倾向于在99%的情况下与EXISTS联系,然后这个MySQL语法占用了当天的1%.
pax*_*blo 19
由于这似乎是pets和之间的简单父/子关系pets_activities,因此最好使用删除级联创建外键约束.
这样,当pets删除pets_activities行时,与其关联的行也会自动删除.
然后您的查询变得简单:
delete from `pets`
where `order` > :order
and `pet_id` = :pet_id
Run Code Online (Sandbox Code Playgroud)
RN *_*aha 13
用这个
DELETE FROM `articles`, `comments`
USING `articles`,`comments`
WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4
Run Code Online (Sandbox Code Playgroud)
要么
DELETE `articles`, `comments`
FROM `articles`, `comments`
WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4
Run Code Online (Sandbox Code Playgroud)