我试图查询共享关系的记录。为了避免无端的背景,这是我最喜欢的老式任天堂游戏的一个假设的例子:
考虑一个拳击手表:
tableBoxers
ID | boxerName
----------------
1 | Little Mac
2 | King Hippo
3 | Von Kaiser
4 | Don Flamenco
5 | Bald Bull
现在我有一个将它们链接在一起的关系表
boxingMatches
boxerID1 | boxerID2
-----------------------
1 | 3
2 | 5
2 | 4
5 | 1
4 | 1
由于我不想区分ID1和ID2,因此我创建了一个将它们联合起来的查询:
SELECT firstID AS boxerID1, secondID AS boxerID2 FROM
(
SELECT boxerID1 AS firstID, boxerID2 AS boxerID FROM boxingMatches
UNION ALL
SELECT boxerID2 AS firstID, boxerID1 AS secondID FROM boxingMatches
) ORDER BY firstID, secondID
我明白了:
queryBoxingMatches
boxerID1 | boxerID2
-----------------------
1 | 3
1 | 4
1 | 5
2 | 4
2 | 5
3 | 1
4 | 1
4 | 2
5 | 1
5 | 2
现在我有VBA脚本,用户可以选择他感兴趣的拳击手。让他们说他选择了Little Mac(1)和King Hippo(2)。这会附加到临时表中:
summaryRequest
boxerID
--------
1
2
使用table [summaryRequest]和[queryBoxingMatches],我如何找出Little Mac(1)和King Hippo(2)同样反对的人?结果应该是Bald Bull(5)和Don Flamenco(4)。
请记住[summaryRequest]可能有0个或更多记录。我考虑过INTERSECT,但我不确定这是否适用于此。我尝试过多种方式使用COUNT,但是当存在多种关系时,它会提供不需要的数据(例如,如果Little Mac与Bald Bull打过两次而King Hippo只打过他一次)。
我无法帮助,但感觉答案简单明了,我只是在思考它。任何帮助表示赞赏。感谢。
答案 0 :(得分:0)
不确定MS Access中是否有这样的作用:
.circle-diameter
答案 1 :(得分:0)
好的,我想我找到了答案:
SELECT boxerID2 FROM
(
SELECT boxerID2, COUNT(boxerID2) AS getCount FROM queryBoxingMatches
WHERE boxerID1 IN (SELECT ID FROM summaryRequest)
GROUP BY boxerID2
)
WHERE getCount = (SELECT COUNT(*) FROM summaryRequest)
这是COUNT()的一个游戏,我不喜欢,因为COUNT()不能保证完整的关系 - 只是一种模式。