我几个月前更新了一个旧网站,从Joomla安装转移到定制系统。为了将Joomla表中的数据转换为新格式,我编写了各种php脚本,逐段遍历旧记录,处理它们并插入到新表中。一切都很好,直到我最近发现我忘记将die()语句添加到其中一个脚本的顶部,并且不知何故,搜索机器人一直在快速ping该脚本以在一个特定部分中精确添加610个重复项。
所以我对数据的了解是ID最低的行是我要保留的行,复制只存在于CATEGORY = 8中。为了确保重复,行ORIGINAL_ID将匹配
超越SELECT,INSERT,DELETE,我不是MySQL的专家,对如何处理这个问题感到困惑。专家们会提出什么建议?
编辑:示例代码
ID CATEGORY TITLE ORIGINAL_ID
1 7 A 1
2 8 A 2
3 8 A 2
4 8 B 3
5 8 C 4
6 8 A 2
在上面的例子中,记录3& 6应该被剥离,因为它们在CATEGORY = 8,有重复的ORIGINAL_ID;但保留id最低的行(第2行)
答案 0 :(得分:0)
因此,您要识别类别8中的记录,其中存在具有相同类别,标题和原始ID的另一记录。您还想检查其他记录是否具有较低的ID。
所以:
Select *
from MYTABLE T1
where CATGEORY = 8
and EXISTS (
select 1
from MYTABLE T2
where T2.CATEGORY=T1.CATEGORY
and T2.TITLE=T1.TITLE
where T2.ORIGINAL_ID=T1.ORIGINAL_ID
where T2.ID>T1.ID
如果你运行它并且它只返回你想要删除的记录,则替换"选择*"使用"删除"并重新运行。