以下来自access帮助:
UniqueRecords 属性
使用 UniqueRecords 属性可以指定是否只返回唯一记录,该记录基于所有基础数据来源中的全部字段,而不仅仅基于查询中出现的那些字段。
注释 UniqueRecords 属性仅应用于追加查询、生成表查询和选择查询。
设置
UniqueRecords 属性使用以下设置:
设置
|
说明
|
是
|
不返回重复记录。
|
否
|
(默认值)返回重复记录。
|
可以在查询的属性表中,或在“查询”窗口的“SQL”视图中设置 UniqueRecords 属性。
注释 在使用 SQL 语句新建查询时,可以设置该属性。DISTINCTROW 谓词对应于 UniqueRecords 属性设置;DISTINCT 谓词对应于 UniqueValues 属性设置。
说明
如果需要忽略的是基于整个重复记录的数据,而不仅仅是重复字段时,可以使用 UniqueRecords 属性。只要记录中某一字段值与另一个记录中同一字段的值不同,Microsoft Access 都将记录视为唯一的。
UniqueRecords 属性只有当在查询中使用多个表,并且从这些表中选择了用于查询的字段时才有效。如果查询只包含一个表,将忽略 UniqueRecords 属性。
UniqueRecords 和 UniqueValues 属性相互联系,一次只能将它们中一个设为“是”。例如,当将 UniqueRecords 设置为“是”时,Microsoft Access 自动将 UniqueValues 设为“否”。不过,可以将它们两者都设置为“否”。当两个属性都被设置为“否”时,将返回所有的记录。
示例
该示例中的查询从“客户”表中返回那些在“订单”表中至少有一个订单的客户列表。
“客户” 表
公司名称
|
客户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
|
下面的 SQL 语句返回下表中的客户名称;
SELECT DISTINCTROW Customers.CompanyName, Customers.CustomerID
FROM Customers INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
返回的客户
|
客户ID
|
Ernst Handel
|
ERNSH
|
Familia Arquibaldo
|
FAMIA
|
Folies gourmandes
|
FOLIG
|
还是没弄明白,我又试了一下,下面这两种结果,为什么是这样??
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
|
我把“订单”表里的第一行复制粘贴,变成重复的数据。 用了上面DISTINCTROW语句之后的查询结果还是有重复行的。好像DISTINCTROW没起到什么作用
注意:
1,使用 UniqueRecords 属性可以指定是否只返回唯一记录,但该记录基于所有基础数据来源中的全部字段,而不仅仅基于查询中出现的那些字段。
在
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的作用范围是查询所涉及的所有基础数据来源中的全部字段,无论字段是否在查询中出现。
2,UniqueRecords 属性只有当在查询中使用多个表,并且从这些表中选择了用于查询的字段时才有效。如果查询只包含一个表,将忽略 UniqueRecords 属性。
也就是说,当你用订单表一个表使用DISTINCTROW谓词时是无效的。
所以会出现“我把“订单”表里的第一行复制粘贴,变成重复的数据。 用了上面DISTINCTROW语句之后的查询结果还是有重复行的。好像DISTINCTROW没起到什么作用”
总记录:4篇 页次:1/1 9 1 :