首页 > 解决方案 > 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 的正确值。但我不能让它按照我需要的方式工作。

标签: sqlms-access

解决方案


您需要将子查询与外部查询相关联 - 目前您的子查询没有连接,因此返回所有参与者的结果。如果没有样本数据,很难确定,但这应该可行:

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;

推荐阅读