【问题标题】:SQL COUNT entries related to 3 tables与 3 个表相关的 SQL COUNT 条目
【发布时间】:2013-09-07 15:41:06
【问题描述】:

我为这两个表运行了这条 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 连接起来......

关于如何计算连接到每个线程的所有用户的站数有什么帮助吗??

【问题讨论】:

    标签: sql ms-access count


    【解决方案1】:

    这是 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 的回答。

    【讨论】:

      【解决方案2】:

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

      SELECT tblThreads.*,
             (SELECT COUNT(*)
              FROM tblUsers inner join
                   tblStations
                   on tblStations.fldUserID = tblUsers.fldID
              WHERE tblUsers.fldThreadID = tblThreads.fldID
             ) AS TotalStationsInThread
      FROM tblThreads;
      

      【讨论】:

      • 不幸的是,这不起作用。它不接受括号中的声明。
      • @AtlantisAtlantis 。 . .它给出错误吗?如果是这样,错误是什么?
      • 这是错误:语法错误。在查询表达式'(SELECT COUNT(*) FROM tblUsers JOIN tblStations ON tblStations.fldUserID = tblUsers.fldID WHERE tblUsers.fldThreadID = tblThreads.fldID)'。
      • 您使用的是什么 SQL 引擎? (您实际上应该使用正确的 SQL 引擎标记问题。)假设表名和字段名存在,我很确定语法是正确的。
      • 它可以像这样工作:'SELECT tblThreads.*, (SELECT COUNT(tblStations.fldID) FROM tblUsers LEFT OUTER JOIN tblStations ON tblStations.fldUserID = tblUsers.fldID WHERE tblUsers.fldThreadID = tblThreads.fldID ) AS TotalStationsInThread FROM tblThreads;'但这仅显示一个线程的 TotalStationsInThread。
      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 2021-03-29
      • 2014-10-22
      • 2023-03-26
      • 2017-05-04
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多