Access多表查询去重问题:含指定字符串的图书ID与标题查询
解决Access家庭图书馆查询重复记录问题
问题分析
你的查询返回重复图书记录,根源是单本图书关联了多个符合条件的作品,qryBookOrWork中间查询会为每个匹配的作品生成一行数据,最终导致同一本书出现多条结果。
解决方案
以下三种方法都能实现需求,返回不重复的图书ID和Title:
方法1:使用DISTINCT去重
直接在查询中添加DISTINCT关键字,过滤重复的图书记录:
SELECT DISTINCT QBW.ID, QBW.Title FROM qryBookOrWork AS QBW WHERE (QBW.Title LIKE '*civil*') OR (QBW.WorkTitle LIKE '*civil*')
注意:Access中模糊匹配的通配符是
*,而非SQL标准的%;如果你的查询启用了ANSI SQL模式,才需要替换成%。另外原查询中LIKE 'civil'是精确匹配,改为*civil*才能匹配包含该字符串的内容。
方法2:使用EXISTS子查询(更高效)
跳过中间查询,直接关联原表,通过子查询判断是否存在符合条件的作品,从根源避免生成重复行:
SELECT B.ID, B.Title FROM Books AS B WHERE B.Title LIKE '*civil*' OR EXISTS ( SELECT 1 FROM BookWorkLink AS L -- 替换为你的多对多中间表实际名称 INNER JOIN Works AS W ON L.WorkID = W.ID WHERE L.BookID = B.ID AND W.Title LIKE '*civil*' )
方法3:使用GROUP BY分组
按图书ID和Title分组,确保每个图书只返回一条记录:
SELECT QBW.ID, QBW.Title FROM qryBookOrWork AS QBW WHERE (QBW.Title LIKE '*civil*') OR (QBW.WorkTitle LIKE '*civil*') GROUP BY QBW.ID, QBW.Title
内容的提问来源于stack exchange,提问作者Les Gordon
相关产品推荐
相关产品推荐

