首页 > 解决方案 > 当与第二个字段相关时,在一个字段中查找完整匹配项

问题描述

对于我希望通过以下两个表格进行合理总结的问题,我将不胜感激:

在此处输入图像描述

表 1 包含主要原始数据,其中 FieldA 与 FieldB 中的特定项目有关系。

FieldB 中的项目相对于 FieldA 中的每个唯一项目都是唯一的——也就是说,猫、狗、兔子、鸡只会在 FieldA 的“a”组下出现一次(它们可以出现在该字段的其他位置)。对于 FieldA 中的 b、c 和 d 项目类似(所有 FieldB 项目仅针对每个项目出现一次)。

Table2 列出了 Table1、FieldB 中每个唯一项的总计数,由以下查询生成:

qryCount:

select FieldB, count(FieldB) AS FCount 
from Table1
GROUP BY FieldB;

我的问题: 用户在 Table1 中输入来自 FieldA 的唯一值,然后查询应该返回 FieldB(Table1)中的所有唯一值,其中实现了完全匹配,相对于 Table2 中的相应 FCount 总数。

例如

我确实在 Excel 中使用 VBA 解决了这个问题(构建一个命中表并查看是否满足用户输入值的相应总计数),但是虽然我在使用 Access SQL (2007) 方面确实有一些经验,但我很挣扎从 VBA 转换这个想法。我会很感激一些帮助。

标签: sqlms-access-2007

解决方案


除非我误解了逻辑,否则我会建议以下内容:

select distinct t1.fieldb from table1 t1 
where 
    t1.fielda in ('a', 'b', 'd') and 
    not exists 
    (
        select 1 from table1 t2 
        where t2.fieldb = t1.fieldb and t2.fielda not in ('a', 'b', 'd')
    )

关于上面的几点说明:

  • 该查询本质上是选择其持有的值FieldB仅出现在目标FieldA组(在本例a中为 , b, d)而不出现在其他组中的记录。

  • 只有table1被查询引用,因为没有使用聚合或计数。

  • 的使用select 1纯粹是一种优化,因为我们不关心相关子查询返回什么,而只关心一个或多个记录存在 - 因此,它可以返回验证这一点所需的最少信息量。


推荐阅读