sql - Access SQL 子查询 WHERE 子句不过滤结果
问题描述
我对 Access 数据库中的查询有疑问。该数据库将用于存储和管理体育联赛的基本统计数据。这是我的查询字符串:
SELECT Participants.Name AS Name
, Count(Games.Participants) AS NumberOfGames
, (
SELECT Name
, Count(Games.Winner)
FROM Participants
INNER JOIN Games
ON Participants.ID = Games.Winner
WHERE Participants.ID = Games.Winner
) AS Won
FROM Participants
INNER JOIN Games
ON Participants.ID = Games.Participants.Value
GROUP BY Participants.Name
ORDER BY Participants.Name;
由于某种原因,子查询返回所有记录的数量,而不仅仅是获胜者的 ID 与参与者的 ID 匹配的记录,我不知道为什么。子查询的内容不在子查询中时有效。当我在子查询的 WHERE 子句中明确声明参与者的 ID 时,它会返回该 ID 的正确值。但我不能让它按照我需要的方式工作。
解决方案
您需要将子查询与外部查询相关联 - 目前您的子查询没有连接,因此返回所有参与者的结果。如果没有样本数据,很难确定,但这应该可行:
SELECT Participants.Name AS Name,
Count(Games.Participants) AS NumberOfGames,
(SELECT Count(Winner)
FROM Games
WHERE Games.Winner = Participants.ID) AS Won
FROM Participants
INNER JOIN Games ON Participants.ID = Games.Participants.Value
GROUP BY Participants.Name
ORDER BY Participants.Name;
推荐阅读
- python - 仅用零填充左 NaN 的最 Pythonic 方式是什么?
- reactjs - Material-UI 在打开对话框时向 body 标签添加填充
- sql - 在 PostgreSQL 中使用 SELECT from RETURNING while UPDATE
- java - 如何在运行时编辑方法注释属性?
- button - GTK3中ButtonBox的控制宽度
- javascript - Japavascript 和 P5.js - 优化 4D 投影代码
- docker - 启动 Docker 卷并为其命名
- google-apps-script - Google Apps 脚本 - 环聊聊天机器人未显示
- python - 如何使用适当的缩进(格式化样式)将python动态代码保存到数据库
- python - 初学者:使用除数创建列表