使用join语句从两个表中删除,但出现错误


delete from two tables by using join statement, but there is an error

我想从content表中删除文章,同时从comments表中删除与删除的这些文章相关的注释。

我已经创建了以下查询:

$sql = "DELETE FROM content JOIN comments ON content.id = comments.content_id WHERE content.delete_time < UNIX_TIMESTAMP()";
$this->db->query($sql);

但我有一个错误:

Error Number: 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 'JOIN comments ON content.id = comments.content_id WHERE delete_time < UNIX_TIMES' at line 1
DELETE FROM content JOIN comments ON content.id = comments.content_id WHERE delete_time < UNIX_TIMESTAMP()

上一个查询中有什么错误?

最好的建议是将SQL FK从(删除时无操作)更新为(删除级联时),这将删除SQL DB上的所有相关行,只需:

从tbl内容中删除其中ArticleID="givenArticleID";

并且这将处理DB中的所有相关行。

另一种方法是先删除相关的,然后删除父亲。

您没有为联接的删除查询使用正确的语法

DELETE content.*,comments.*
 FROM content 
INNER JOIN comments ON content.id = comments.content_id 
WHERE content.delete_time < UNIX_TIMESTAMP()

通过这种方式,您可以从内容表中删除行,以及与delete_time小于UNIX_TIMESTAMP()的每个内容相关的行,但请确保首先在演示数据上测试查询,而不是直接在生产数据上测试查询