添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
这篇文章是对我自己另一篇文章的补充。( Access 查询同一张表中某个字段含有重复项的记录)

记录的动力总是来自于工作中遇到的问题。 上次只要根据某个字段把有重复项的记录列出来 ,这次条件增多了,要根据两个或两个以上字段来判断,当这些字段的值全部相同时,才认为出现了重复记录。

还是以上次的数据为例吧,略有修改。表名 Student

ID Name City Address
1 徐俊 北京 北京市东四北大街520号
2 王洪涛 北京 北京市西单北大街151号
3 张立涛 大连 大连市西岗区新开路69号
4 佘高峰 济南 山东省济南市泺文路50号
5 徐俊 上海 上海市静安区南阳路46号
6 张忠飞 上海 上海市肇嘉浜路414号
7 徐俊 上海 上海市乳山路150号

从城市角度看,一个城市有很多学员很正常;中国人重名的多,单看名字很难说是不是同一个人。这次我们的查询要结合“City”和“Name”两个字段,只有这两个字段的值都相等,我们才进一步检查是不是同一个人。

先用Access 2003 提供的“查找重复项查询向导”生成一个查询看看:

SELECT student.Name, student.City, student.Address
FROM student
WHERE ((student.Name) In (SELECT [Name] FROM [student] As Tmp GROUP BY [Name], [City] HAVING Count(*)>1  And [City] = [student].[city]))
ORDER BY student.Name, student.City

Name City Address
徐俊 上海 上海市乳山路150号
徐俊 上海 上海市静安区南阳路46号

注意: 徐俊 北京 没有列出来,符合我们的预期,因为我们这次是两个标准。

不过我觉得Access 的向导生成的语句有点搞,看上去不是那么一目了然。

这条SQL语句依然用了子查询“select name from student group by name, city  having count(*)>1”。这个子查询的意思是:把student表里的记录同时按名字和城市组合在一起,并把组合后数量大于1的记录返回。就这个例子而言,这条子查询的返回值是“徐俊/上海”。

但是跟单个字段查找重复值不一样的地方是,这次多了个“And [City] = [student].[city]”,我们这次的子查询的全部内容是:

select name from student as Tmp group by name, city  having count(*)>1 And [City] = [student].[city]

这个子查询有外部条件,这就让事情有点复杂了。在子查询里使用外部条件,需要对SQL 语句使用的相当熟练和有技巧。

我换了种SQL的写法来达到同样效果,自己觉得看上去清晰点。

SELECT student.Name, student.City, student.Address
FROM student  inner join
(SELECT Name, city  FROM student  GROUP BY Name, City  HAVING Count(*)>1  ) As Tmp
ON  student.Name=Tmp.Name  AND student.city = Tmp.city
ORDER BY student.Name, student.City

这篇文章是对我自己另一篇文章的补充。(Access 查询同一张表中某个字段含有重复项的记录)记录的动力总是来自于工作中遇到的问题。上次只要根据某个字段把有重复项的记录列出来,这次条件增多了,要根据两个或两个以上字段来判断,当这些字段的值全部相同时,才认为出现了重复记录。还是以上次的数据为例吧,略有修改。表名 Student 有一个db1.mdb,其中有一个表tbl1, 表中 两个 字段 id和name。 另外还有一个db2.mdb,其中有一个表tbl2, 表中 也有 两个 字段 id和name。 现在想用db2中的tbl2的name去更新db1中的tbl1的id相同的name。 (比如有一个工人名单,有工人编号和工人姓名,现在换了一批工人,自然也就把工人姓名更新了。财务为图方便,想用
如何快速删除 Access 指定 字段 重复 记录 Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiDB/html/delphi_20061223120244146.html 我有一个 ACCESS 数据表如下 ID Name Score 1 老张 80 ...
你可以使用以下 SQL 语句来统计 两个 字段 中的不 重复 值: SELECT COUNT(DISTINCT column1, column2) FROM table_name; 其中,column1 和 column2 分别是你想要统计的 两个 字段 的名称,table_name 是你要 查询 的表的名称。这个 SQL 语句会返回 两个 字段 中不 重复 值的数量。
报价单号 客户代码 ITEMNO 美元单价 人民币单价 单位 业务员 报价时间 NG1 NG A $5.00 ¥0.00 2017-03-02 NG1 NG B $10.00 ¥0.00 2017-03-10 NG2 NG A $15.00 ¥0.00 2017-03-22 US1 US A $1.00 ¥0.00 2017-03-23 US2 US B $2.00 ¥0.00 2017-03-22 US2 US C $3.00 ¥0.00 2017-03-08 我现在有一个这样的报价单表,每一个客户的同一个产品会有两次以上的报价,如何查询出他最后一次的报价?