[英]mySQL delete row with count(*) GROUP and HAVING
我有这个查询,我得到所有具有相同 articleID 和 categoryID = 2153 的双条目现在我想删除这些行。 但这似乎不能直接起作用。 所以我用子查询尝试了它,但是当我使用 IN 时,我需要一个只返回 id 的子查询。 但这也是不可能的。
如何从此查询中删除行?
SELECT id, articleID, categoryID, count(*) AS count
FROM `s_articles_categories`
GROUP BY articleID
HAVING count(*) > 1 AND categoryID = 2153
假设 id 是表 s_articles_categories 的主键,您可以对子选择结果使用连接。
删除所有行:
delete r.*
from s_articles_categories r
INNER JOIN (
SELECT id, articleID, categoryID, count(*) AS count FROM
`s_articles_categories` r
GROUP BY articleID
HAVING count(*) > 1 AND categoryID = 2153
) t on t.id = r.id
如果要删除所有重复项但在每个组中保留其中一个,则可以使用以下查询:
DELETE FROM `s_articles_categories` s
WHERE s.categoryID = 2153 AND EXISTS (
SELECT 1
FROM `s_articles_categories` s1
WHERE s1.articleID = s.articleID AND s1.categoryID = s.categoryID AND s1.id < s.id
)
我建议将其写为:
delete ac
from s_articles_categories ac join
(select articleId, categoryid, min(id) as min_id
from s_articles_categories
where categoryID = 2153
group by articleId, categoryid
) ac2
on ac2.articleId = ac.articleId and
ac2.categoryid = ac.categoryid and
ac.id > ac2.min_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.