SQLite查询:筛选单列重复且排除关联列完全重复的值
SQLite:筛选重复checksum并排除单一file重复记录
需求说明
筛选checksum列存在重复的值,但需排除那些仅对应同一个file重复录入的情况——也就是该checksum的所有关联记录都属于同一个file,只是该file被多次插入。
根据给定示例数据,最终需要得到的checksum为:1、3、4。
原查询问题
你当前的查询错误地排除了所有出现多次的file,导致checksum=3中的file5、checksum=4中的file7/8都被过滤,剩余记录无法满足count(checksum) > 1的条件,因此无法命中目标值。
正确解决方案
方案1:分组统计不同file数量(高效简洁)
利用COUNT(DISTINCT file)直接统计每个checksum对应的不同file数量,只要数量≥2,就说明该checksum对应多个不同file,符合要求:
SELECT checksum FROM t1 GROUP BY checksum HAVING COUNT(DISTINCT file) >= 2;
方案2:EXISTS子查询(适用于复杂扩展场景)
通过子查询验证每个checksum是否存在至少一个不同的关联file:
SELECT DISTINCT checksum FROM t1 t_main WHERE EXISTS ( SELECT 1 FROM t1 t_sub WHERE t_sub.checksum = t_main.checksum AND t_sub.file != t_main.file );
结果验证
执行上述任一语句,都会返回预期的1、3、4三个checksum值。
内容的提问来源于stack exchange,提问作者frenzy
相关产品推荐
相关产品推荐

