东流西上
故在柳溪,水东有柳

ACCESS中distinct 和 distinctrow 的区别

阿里云主机

“客户” 表

公司名称 客户ID
Ernst Handel ERNSH
Familia Arquibaldo FAMIA
FISSA Fabrica Inter. Salchichas S.A. FISSA
Folies gourmandes FOLIG

 

“订单”表

客户ID 订单ID
ERNSH 10698
FAMIA 10512
FAMIA 10725
FOLIG 10763
FOLIG 10408

 

SELECT DISTINCT 客户.公司名称, 订单.客户ID
FROM 客户 INNER JOIN 订单 ON 客户.客户ID = 订单.客户ID;

结果:
公司名称 客户ID
Ernst Handel ERNSH
Familia Arquibaldo FAMIA
Folies gourmandes FOLIG

 

SELECT DISTINCTROW 客户.公司名称, 订单.客户ID
FROM 客户 INNER JOIN 订单 ON 客户.客户ID = 订单.客户ID;

结果:
公司名称 客户ID
Ernst Handel ERNSH
Familia Arquibaldo FAMIA
Familia Arquibaldo FAMIA
Folies gourmandes FOLIG
Folies gourmandes FOLIG

 

SELECT DISTINCT 客户.公司名称, 订单.客户ID
FROM 客户 INNER JOIN 订单 ON 客户.客户ID = 订单.客户ID;

使用的是 DISTINCT 谓词,因此,只显示客户.公司名称, 订单.客户ID 2个字段不同的记录,重复的都不显示。

而在
SELECT DISTINCTROW 客户.公司名称, 订单.客户ID
FROM 客户 INNER JOIN 订单 ON 客户.客户ID = 订单.客户ID;

使用的是 DISTINCTROW 谓词,是基于整行唯一的,忽略基于整个重复记录的数据,而不仅仅是重复字段,此时客户表和订单表的所有字段都参加比较,有一个字段不同就显示。
而FAMIA 有2个不同的订单号(10512,10725),FOLIG也有2个不同的订单号(10763,10408)。所以虽然订单号不在你的查询字段内,access也认为这些记录是不同的,它们(FAMIA和FOLIG)也都要被显示2次。

简而言之,DISTINCT的作用范围仅是查询中出现的那些字段;而DISTINCTROW的作用范围是查询所涉及的所有基础数据来源中的全部字段,无论字段是否在查询中出现。

 

赞(0) 打赏
转载请注明出处:水东柳博客 » ACCESS中distinct 和 distinctrow 的区别
分享到: 更多 (0)

评论 抢沙发

6 + 5 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏