如何将SubCategory表去重后的CategoryName按orderby顺序插入Category主表
解决方案
你需要先为每个去重后的CategoryName匹配其在SubCategory表中对应的排序优先级,再按优先级排序后插入即可,修正后的SQL语句如下:
INSERT INTO Category (CategoryName) SELECT CategoryName FROM ( SELECT CategoryName, MIN(orderby) AS sort_priority FROM SubCategory fr WHERE NOT EXISTS ( SELECT 1 FROM Category fr1 WHERE fr1.CategoryName = fr.CategoryName ) GROUP BY CategoryName ) AS unique_categories ORDER BY sort_priority ASC
逻辑说明
- 内层查询先用
NOT EXISTS过滤掉已经存在于Category表的分类名称 - 通过
GROUP BY CategoryName拿到唯一的分类名,同时用MIN(orderby)取每个分类在SubCategory中最早出现的排序值作为插入排序依据,如果你需要按分类最后一次出现的顺序插入,把MIN换成MAX即可 - 外层添加
ORDER BY子句,就可以保证插入顺序完全符合你预期的orderby字段排序规则
注意:SQL 表本身是无序集合,如果后续查询
Category表时也需要固定这个顺序,建议你在Category表中新增一个排序字段,把上面的sort_priority也同步插入进去,后续查询时按该字段排序即可。
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

