共计 960 个字符,预计需要花费 3 分钟才能阅读完成。
“客户”表
公司名称 | 客户 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 的作用范围是查询所涉及的所有基础数据来源中的全部字段,无论字段是否在查询中出现。