我对数据库工作比较陌生,所以我可能会错误地使用一些术语。请不要被那个误导。
假设我有三个表:Items、Customers 和一个连接两者的 Junction 表。(这与我的实际用例无关,所以忽略任何看起来不合理的东西。我只是在调味应该是一个抽象的例子。)
假设 Items 表有 4 条记录,数字 1 到 4。假设 Customers 表有 10 条记录,字母 A 到 J。假设这是 Junction 表:
物品 | 顾客 |
---|---|
1 | 一个 |
1 | C |
1 | H |
2 | 一个 |
2 | H |
3 | 一个 |
3 | C |
3 | H |
4 | C |
4 | D |
4 | 乙 |
这张表上的排序很容易看出它在某种意义上将项目映射到客户集,如下所示:
物品 | 客户集 |
---|---|
1 | {A,C,H} |
2 | {A,H} |
3 | {A,C,H} |
4 | {C、D、E} |
我正在寻找比较这些集合映射的方法。让 X 和 Y 是任意两个项目,让 J(X) 是由联结表将 X 映射到的客户集合。我希望能够回答以下问题:
- J(X) = J(Y) 吗?[扩展,所以不考虑顺序]
- J(X) 是 J(Y) 的子集吗?
- J(X) 是否与 J(Y) 部分重叠?如果是这样,它们的交叉点是什么?
从计算的角度来看,这些似乎都是非常基本的问题。我拒绝相信没有办法做到这一点。如果在 Access 中不可能,但在其他系统中可能,你能指出我正确的方向吗?
假设您的表是
t
. 请记住,我们可以考虑以下定义:然后你可以这样做:
此查询包含三个部分。
第 1 部分 - 获取商品不同且客户相同的行
第 2 部分 - 获取项目不同且 item_1 的客户在 item_2 的客户列表中不存在的行
第 3 部分 - 获取项目不同且 item_2 的客户在来自 item_1 的客户列表中不存在的行
考虑 item_1 = 1 的情况。目标是将项目 2 - 4 的每个客户集与项目 1 的客户集进行比较。结果如下(我已将其粘贴到 Excel 中,以便对其进行注释)
现在假设您使用该查询并将其保存为数据库中名为 [comparisons] 的视图,那么您可以执行以下操作(除其他外):