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 条评论