如何去除SQL查询结果中含重复item的数据行
问题说明
当前查询语句:
select item_display_name from all_requirements where state = 'submitted_pending' and id = 'mNAr9viL4='
执行返回2条重复的'id proof',本质是where条件匹配到了2行数据,两行的item_display_name值一致但document_id值不同,数据库会默认返回所有符合过滤条件的行,不会自动做去重处理。
实现方法
要得到去重后的唯一item_display_name,有两种标准实现方案:
- 使用
DISTINCT关键字(当前场景优先选择)DISTINCT的作用就是对查询返回的结果集按指定列去重,修改后的语句如下:
写法简洁,语义明确,就是提取唯一的展示名称,执行后只会返回单条SELECT DISTINCT item_display_name FROM all_requirements WHERE state = 'submitted_pending' AND id = 'mNAr9viL4=''id proof'结果,完全匹配需求。 - 使用
GROUP BY分组(适合后续需要扩展聚合计算的场景)
按目标字段分组也可以实现去重效果,语句如下:
如果后续需要统计同一个展示名关联了多少份不同文档,只需要在select子句中增加SELECT item_display_name FROM all_requirements WHERE state = 'submitted_pending' AND id = 'mNAr9viL4=' GROUP BY item_display_nameCOUNT(DISTINCT document_id) AS related_doc_count这类聚合函数即可,扩展性更强。
避坑提醒:不要直接加
LIMIT 1实现“只返回一条”的效果。当前场景下两条结果的展示名一致,加LIMIT 1看似能得到正确结果,但如果后续出现同过滤条件下对应多个不同展示名的异常数据,LIMIT 1会随机返回其中一条,会导致业务逻辑出现隐蔽错误。
内容的提问来源于stack exchange,提问作者Alwaysblue
相关产品推荐
相关产品推荐

