与3个表相关的SQL计数项

与3个表相关的SQL计数项,sql,ms-access,count,Sql,Ms Access,Count,我让sql语句为这两个表运行:tblStations和tblThreads,用于计算每个线程中的站数: SELECT tblThreads.*, (SELECT COUNT(*) FROM tblStations WHERE tblStations .fldThreadID=tblThreads.fldID) AS TotalStationsInThread FROM tblThreads; 然后为系统中的每个线程显示tblThread.Name和TotalStationsInThread 现

我让sql语句为这两个表运行:tblStations和tblThreads,用于计算每个线程中的站数:

SELECT tblThreads.*, (SELECT COUNT(*) FROM tblStations WHERE tblStations .fldThreadID=tblThreads.fldID) AS TotalStationsInThread FROM tblThreads;
然后为系统中的每个线程显示tblThread.Name和TotalStationsInThread

现在,我在这个层次结构中添加了另一个表tblUsers: 每个线程可以有多个用户,每个用户可以有多个站点。 这三个表通过以下方式相互关联:

tblStations.fldUserID=tblUsers.fldID > tblUsers.fldThreadID=tblThreads.fldID.
因此,我将SQL查询更改为:

SELECT tblThreads.*, (SELECT COUNT(*) FROM tblStations WHERE tblStations.fldUserID=tblUsers.fldID AND tblUsers.fldThreadID=tblThreads.fldID) AS TotalStationsInThread FROM tblThreads;
但现在我得到了这样的信息:一个或多个必需参数没有给定值。就像数据库无法通过tblUsers将表tblStations与tblThreads连接一样

关于如何计算连接到每个线程的所有用户的站点数量,请提供任何帮助???

您需要在from子句中包含TBluser:


这是MS Access Jet数据库引擎的正确答案:

SELECT tblThreads.*, (SELECT COUNT(tblStations.fldUserID) FROM tblStations INNER JOIN tblUsers ON tblStations.fldUserID = tblUsers.fldID WHERE  tblUsers.fldThreadID = tblThreads.fldID)  AS TotalStationsInThread FROM tblThreads;

非常感谢Gordon Linoff的回答。

不幸的是,这不起作用。它不接受括号中的陈述。@Atlantis。这是一个错误吗?如果是,错误是什么?这是错误:语法错误。在查询表达式“SELECT COUNT*FROM tblUsers JOIN tblStations ON tblStations.fldUserID=tblUsers.fldID WHERE tblUsers.fldThreadID=tblThreads.fldID”中,您使用的是什么SQL引擎?实际上,您应该使用正确的SQL引擎来标记问题。假设表名和字段名存在,我很确定语法是正确的。它可以这样工作:“SELECT tblThreads.*,SELECT COUNTtblStations.fldID FROM tblUsers LEFT OUTER JOIN tblStations ON tblStations.fldUserID=tblUsers.fldID WHERE tblUsers.fldthreaid=tblThreads.fldID AS totalstationsinthreads FROM tblThreads;”但这仅显示一个线程的TotalStationsInThread。
SELECT tblThreads.*, (SELECT COUNT(tblStations.fldUserID) FROM tblStations INNER JOIN tblUsers ON tblStations.fldUserID = tblUsers.fldID WHERE  tblUsers.fldThreadID = tblThreads.fldID)  AS TotalStationsInThread FROM tblThreads;