在一个查询中从具有公共列的多个表中删除?

时间:2012-10-07 00:34:44

标签: mysql join sql-delete micro-optimization

微观优化我知道,这更多是因为我很好奇。

我有两个链接表,

blog_categories_posts => post_id, category_id  
blog_tags_posts       => post_id, tag_id

我将根据post_id

删除两个表中的所有链接
DELETE FROM blog_categories_posts WHERE post_id = {$id};
DELETE FROM blog_tags_posts WHERE post_id = {$id};

无论如何,我想知道是否可以立即从两个表中删除,以及它是否会是一个性能(虽然是微观)命中或获得?

我想如果它能起作用:

DELETE FROM blog_categories_posts, blog_tags_posts where post_id = {$id} 

或类似的语法?

1 个答案:

答案 0 :(得分:0)

语法在mysql网站上:Delete Syntax

DELETE FROM tbl1, tbl2
USING tbl1
JOIN tb2 USING (id)
WHERE id = :id

因此,对于您的示例,它将是:

DELETE FROM blog_categories_posts, blog_tags_posts
USING blog_categories_posts
JOIN blog_tags_posts USING (post_id)
WHERE post_id = $id

添加许多表格也很容易:

DELETE FROM tbl1, tbl2, tbl3, tbl4, tbl5
USING tbl1
JOIN tb2 USING (id)
JOIN tb3 USING (id)
JOIN tb4 USING (id)
JOIN tb5 USING (id)
WHERE id = :id