Access中基于子查询结果获取Table1全量关联记录的SQL问题求助
解决Access中查询重复记录的问题
嘿,我来帮你搞定这个Access查询的问题!你遇到的重复记录问题,根源在于Query1里可能存在同一个ID对应多条符合时间条件的记录,当你用INNER JOIN连接时,每一条Query1里的记录都会和Table1中对应ID的记录匹配一次,自然就产生了重复。
下面给你几种靠谱的解决方案:
方案1:修改Query1返回唯一ID
先调整Query1的SQL,让它只返回符合时间条件的唯一ID,这样连接时就不会重复匹配:
SELECT DISTINCT [ID] FROM Table1 WHERE [Last Updated Date] >= #4/1/2018 4:00:00 AM# AND [Last Updated Date] <= #5/1/2018 4:00:00 AM#
之后再用你原来的连接查询:
SELECT A.* FROM Table1 A INNER JOIN Query1 B ON A.[ID] = B.[ID]
这次每个ID只出现一次,就不会有重复记录了。
方案2:用IN子句合并为单查询
如果不想单独创建Query1,可以直接把筛选逻辑放到子查询里,用IN子句自动去重:
SELECT * FROM Table1 WHERE [ID] IN ( SELECT [ID] FROM Table1 WHERE [Last Updated Date] >= #4/1/2018 4:00:00 AM# AND [Last Updated Date] <= #5/1/2018 4:00:00 AM# )
IN会自动忽略子查询里的重复ID,所以主查询只会返回每个ID的所有原始记录,不会重复。
方案3:用EXISTS子查询(效率更高)
如果你的数据量比较大,EXISTS通常会比IN更高效,因为它只要找到匹配的ID就停止检索,不会返回所有匹配项:
SELECT A.* FROM Table1 A WHERE EXISTS ( SELECT 1 FROM Table1 B WHERE B.[ID] = A.[ID] AND B.[Last Updated Date] >= #4/1/2018 4:00:00 AM# AND B.[Last Updated Date] <= #5/1/2018 4:00:00 AM# )
这个写法的逻辑是:检查当前Table1的记录是否存在同ID且符合时间条件的记录,只要存在就保留这条记录。
内容的提问来源于stack exchange,提问作者Clayton.n
相关产品推荐
相关产品推荐

