如何删除已通过SQL查询找到的rss_item表中符合条件的重复记录
操作方法
重要提醒:执行删除操作前请务必先备份rss_item表完整数据,防止误删导致数据丢失
适配支持多表DELETE语法的数据库(如MySQL)
直接将你原有查询语句中的SELECT a.*替换为DELETE a即可,其余逻辑保持不变,完整语句如下:
DELETE a FROM rss_item a JOIN (SELECT title, feedurl, COUNT(*) FROM rss_item WHERE feedurl LIKE '%blabla%' GROUP BY title HAVING count(*) > 1) b ON a.title = b.title AND a.feedurl = b.feedurl WHERE a.guid NOT LIKE '%blabla%'
适配不支持多表DELETE语法的数据库(如SQLite、旧版PostgreSQL)
可以通过IN子查询匹配需要删除的记录,语句如下:
DELETE FROM rss_item WHERE (title, feedurl, guid) IN ( SELECT a.title, a.feedurl, a.guid FROM rss_item a JOIN (SELECT title, feedurl, COUNT(*) FROM rss_item WHERE feedurl LIKE '%blabla%' GROUP BY title HAVING count(*) > 1) b ON a.title = b.title AND a.feedurl = b.feedurl WHERE a.guid NOT LIKE '%blabla%' )
小技巧:正式执行删除前,可以将语句中的DELETE部分替换为SELECT COUNT(*)运行,确认返回的行数和你之前查询到的待删除数据行数一致后,再执行删除操作,进一步降低误删风险
内容的提问来源于stack exchange,提问作者KarlsD
相关产品推荐
相关产品推荐

