Oracle SQL获取Distinct的实现机制及列优先级问题
Oracle SQL中DISTINCT的判定逻辑解析
你的理解不准确。DISTINCT并非逐列依次去重,而是基于整行所有选中列的组合值来判定重复:只有当两行的每一列对应值都完全一致时,才会被视为重复行并合并为一行返回。例如执行
SELECT DISTINCT col1, col2 FROM t时,Oracle会同时校验col1和col2的组合,仅当两行的col1与col2值分别相同时,才会被去重。Oracle没有“去重列顺序规则”。因为DISTINCT的判定依据是所有选中列的整体组合,和SELECT子句中列的排列顺序无关。比如
SELECT DISTINCT col1, col2与SELECT DISTINCT col2, col1,只要两行的col1、col2值对应相同,去重后的结果集内容(除了列顺序)是完全一致的。若查询包含本应无重复的键列(如主键,且连接/合并未导致重复),由于键列本身已保证每行唯一性,此时整行必然不会重复,DISTINCT不会对结果集产生任何影响——最终返回行数等于该键列的唯一值数量。
内容的提问来源于stack exchange,提问作者Nicko
相关产品推荐
相关产品推荐

