【发布时间】:2012-03-07 00:35:10
【问题描述】:
我有一个包含四个表的小型 MS Access 数据库,并且正在努力处理涉及所有表的 SELECT COUNT 查询。任何帮助将不胜感激。
数据库概览:
TABLE COLUMNS
Person Person_ID |....
Games Game_ID | Name |....
Played_Games Played_Games_ID | Game_ID |....
Participation Played_Games_ID | Person_ID |...
列出所有游戏以及每个游戏总共玩了多少次:
SELECT DISTINCT
Games.Name,
(SELECT COUNT(*) FROM Played_Games WHERE Played_Games.Game_ID = Games.Game_ID) AS TimesPlayed
FROM Games
ORDER BY Games.Name
这很好用,但我还想列出每个游戏由特定群体的成员玩了多少次
我在下面的代码(第 4 行)方面取得了一些进展,但我仍然遇到一个小问题:
在最里面的括号后面对 Games.Game_ID 的引用不再链接到当前的 Game_ID,就像在上面的代码中一样。它现在似乎是未定义的。当我在 MS Access Query Designer 中运行它进行测试时,它要求我输入 Games.Game_ID 的值。如果我然后输入一些随机 Game_ID,代码会“完美”运行,但正如您可能已经发现的那样,TimesPlayedByGroupMembers 的值对于记录集中的每一行都将是相同的,并且仅对我输入的那个特定 Game_ID 为 true
SELECT DISTINCT
Games.Name,
(SELECT COUNT(*) FROM Played_Games WHERE Played_Games.Game_ID = Games.Game_ID) AS TimesPlayed,
(SELECT COUNT(*) FROM (SELECT DISTINCT Played_Games_ID FROM Participation WHERE Played_Games_ID IN (SELECT Played_Games_ID FROM Played_Games WHERE Game_ID = Games.Game_ID) AND Person_ID IN (26, 27, 28))) AS TimesPlayedByGroupMembers
FROM Games
ORDER BY Games.Name
我将尝试从内到外解释我的代码做什么和/或应该做什么
最里面的括号列出了涉及当前游戏的 Played_Games_ID,但这不起作用,因为 Games.Game_ID 未链接到当前 Game_ID
中间的括号(包括上面的那个)列出了涉及当前游戏和一个或多个选定人员的 Played_Games_ID。此处列出的 Person_ID 只是一个示例,这部分代码正在运行
最外面的括号(包括以上所有)计算每个游戏由一个或多个选定的人玩了多少次
我真的很困惑,所以任何帮助都将不胜感激
感谢您的宝贵时间
【问题讨论】:
-
这会有点耗时。你能发布表结构、插入和期望的结果示例吗?如果你不着急的话,我会在我回到家时尝试分解它。
-
@Bhrugesh Patel 感谢您有兴趣帮助我!也许我不太明白您的要求,因为我已经列出了表名、所涉及的列以及我想要列出的内容(?)。 GarethD 已经解决了这个任务,但我担心我可能会遇到一些问题,将他的代码整合到更大的图景中。你看到的我的真实查询中涉及更多的表和列。我只是提取了我自己无法弄清楚如何完成的部分或任务
-
我想要插入语句,这样我就可以使用它们来注入数据并对其运行查询。有时查询可能看起来不错,但是当您运行它们并与预期结果匹配时,您会发现很少有额外或缺失的结果。在复杂查询中确认结果始终是最佳实践,而不是相信查询正在做它应该做的事情。
-
好的,我现在明白你的意思了@Bhrugesh Patel,我看到提供创建和注入查询可以让人们更容易提供帮助。对于任何可能的进一步问题,我会牢记这一点。这是我第一次来这里;-)