SQL如何按类型筛选行并对产品表ID-Color-Size组合去重保留目标条码
多表关联SQL去重解决方案
核心实现逻辑
- 按照
Id、Color、Size三个字段对数据行分组,每组对应唯一的ID-Color-Size组合 - 组内行设置优先级:Barcode以
5205开头的行优先级高于其他行 - 每组仅保留优先级最高的1行,不存在5205前缀Barcode的组则保留原有行,最终得到符合要求的唯一结果
查询结果SQL(通用所有支持窗口函数的数据库,如MySQL8.0+、PostgreSQL、SQL Server等)
SELECT Id, Color, Size, Barcode FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY Id, Color, Size ORDER BY CASE WHEN Barcode LIKE '5205%' THEN 1 ELSE 2 END ASC ) AS rank_num FROM 你的产品表名 ) temp_table WHERE rank_num = 1;
直接删除表中重复数据的SQL(MySQL适用)
如果需要直接清理原表的重复数据,可使用以下语句,只会删除存在5205前缀Barcode的分组里的其他重复行,不会影响无5205前缀的分组:
DELETE t1 FROM 你的产品表名 t1 INNER JOIN 你的产品表名 t2 ON t1.Id = t2.Id AND t1.Color = t2.Color AND t1.Size = t2.Size WHERE t2.Barcode LIKE '5205%' AND t1.Barcode NOT LIKE '5205%';
内容的提问来源于stack exchange,提问作者BreeZeR
相关产品推荐
相关产品推荐

