如何查询所有具有相同关系的记录(MS Access)?

时间:2016-06-20 22:03:34

标签: sql ms-access access

我试图查询共享关系的记录。为了避免无端的背景,这是我最喜欢的老式任天堂游戏的一个假设的例子:

考虑一个拳击手表:

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只打过他一次)。

我无法帮助,但感觉答案简单明了,我只是在思考它。任何帮助表示赞赏。感谢。

2 个答案:

答案 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()不能保证完整的关系 - 只是一种模式。