无需子查询、CTE或视图实现表的唯一ID筛选
去重实现方案(无嵌套查询/CTE/视图)
针对表中sorhsch_pidm(用户ID)重复的情况,要保留每个ID的任意一行数据,且不使用子查询、CTE或视图,可根据不同数据库特性采用以下方法:
MySQL 场景
方式1:默认模式下直接分组
如果你的MySQL未开启ONLY_FULL_GROUP_BY sql模式,可直接通过GROUP BY分组实现:
SELECT sorhsch_pidm, sorhsch_sbgi_code, sorhsch_surrogate_id FROM your_table_name GROUP BY sorhsch_pidm;
方式2:开启严格模式时用ANY_VALUE函数
若开启了ONLY_FULL_GROUP_BY,需用ANY_VALUE()明确指定取分组内任意值:
SELECT sorhsch_pidm, ANY_VALUE(sorhsch_sbgi_code) AS sorhsch_sbgi_code, ANY_VALUE(sorhsch_surrogate_id) AS sorhsch_surrogate_id FROM your_table_name GROUP BY sorhsch_pidm;
Oracle/SQL Server 场景
这两个数据库要求GROUP BY的字段必须覆盖SELECT中的非聚合字段,因此用聚合函数(如MAX/MIN)选取任意行即可:
SELECT sorhsch_pidm, MAX(sorhsch_sbgi_code) AS sorhsch_sbgi_code, MAX(sorhsch_surrogate_id) AS sorhsch_surrogate_id FROM your_table_name GROUP BY sorhsch_pidm;
注:用MIN替换MAX效果一致,只是选取的是分组内最小的对应字段值,均满足“保留任意一行”的需求。
内容的提问来源于stack exchange,提问作者Jakob Lovern
相关产品推荐
相关产品推荐

