sql - 当与第二个字段相关时,在一个字段中查找完整匹配项
问题描述
对于我希望通过以下两个表格进行合理总结的问题,我将不胜感激:
表 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 总数。
例如
- 如果用户输入“a,b,d”,则查询输出“cat, dog, rabbit, ferret”,因为 cat(3)、dog(2)、rabbit(1) 和 ferret(1) 的总数都满足了。
- 如果用户输入“a,c”,则查询输出“chicken,rabbit”,因为chicken(2) 和rabbit(1) 的总计数已满足。
- 如果用户输入“b”,则查询不会返回任何内容,因为相应的 FieldB 项目也存在于其他地方。
我确实在 Excel 中使用 VBA 解决了这个问题(构建一个命中表并查看是否满足用户输入值的相应总计数),但是虽然我在使用 Access SQL (2007) 方面确实有一些经验,但我很挣扎从 VBA 转换这个想法。我会很感激一些帮助。
解决方案
除非我误解了逻辑,否则我会建议以下内容:
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
纯粹是一种优化,因为我们不关心相关子查询返回什么,而只关心一个或多个记录存在 - 因此,它可以返回验证这一点所需的最少信息量。
推荐阅读
- sql-server - AFTER DELETE 触发器触发但不将记录插入审计表
- windows - 在一行中执行多个命令,并将标准输出保存到文件中
- json - jq:根据来自外部文件的映射插入值
- ios - Swift - 使用 Xcode 中的蓝色拖动线在两个标签或按钮之间创建连接
- android-studio - 应用程序崩溃而没有显示任何错误?
- javascript - 等待 3 秒以查看变量是否已更改,然后触发某些内容
- r - 包“YHAT”-置信区间
- javascript - 固定行和滚动锁的问题 - Bootstrap 4
- kubernetes - Kubernetes 自动缩放
- c# - 使用 SqlParameter 传递多个参数