含OR条件的重复数据DELETE查询异常原因咨询
问题原因分析
你遇到的情况本质是两个条件用OR组合后,覆盖了同组(cn+activity相同)内除最后保留的那一条之外的所有条目,具体逻辑拆解如下:
- 第一个条件(删除早于最新时间戳的条目):针对的是同组内timestampms小于该组最大timestampms的所有记录,这些记录本来就该被删除。
- 第二个条件(删除timestampms相同的多余项):针对的是同组内timestampms等于最大timestampms,但属于重复的那些记录(比如同组有多个相同最新时间的条目,只留一条,其余都标记为要删除)。
当用OR把这两个条件组合时,相当于告诉数据库:只要记录满足「不是最新时间」或者「是最新时间但属于重复项」,就删除它。这样一来,同组内的所有记录里,只有「最新时间且是该组唯一保留的那条」能逃过删除,自然就只剩一条了。
举个实际例子:假设同组(cn=1,activity="test")有三条记录:
- 记录A:timestampms=100,id=1
- 记录B:timestampms=200,id=2
- 记录C:timestampms=200,id=3
单独执行第一个条件会删掉记录A;单独执行第二个条件会删掉记录B或C中的一个;组合OR后,记录A满足第一个条件被删,记录B和C满足第二个条件(都是最新时间但属于重复项),所以其中一条会被保留,另外两条全删,最终只剩一条最新时间的记录。
其实这个结果是符合你的需求的——既要删早于最新时间的,又要删最新时间的多余重复项,最终每个cn+activity组合下只保留一条最新时间的记录。如果你原本希望保留所有最新时间的条目(仅删除更早的),那第二个条件就不该加进去,或者你对第二个条件的逻辑设定有误。
内容的提问来源于stack exchange,提问作者burn_it
相关产品推荐
相关产品推荐

