带有Count的内部联接,多个表

问题描述 投票:0回答:1

我在MS Access中遇到问题,无法在多个表上获得正确的计数。我根本不是SQL请求方面的专家。

我有一组表,其结构如下:

  • 表1:UID,名称,其他信息
  • 表2:UID,FK_UID_Table1,名称,其他信息
  • 表3:UID,FK_UID_Table2,名称,其他信息
  • 表4:UID,FK_UID_Table3,名称,其他信息

每个FK参考为1-N,N> =0。因此,表2中的项目在表3 FK中可能没有参考。

我想要实现的是在一个查询中获得每个项目的计数。

例如,如果我在表1中选择一个项目,我想得到:

Table1.Name |Count(Table2.UID)|Count(Table3.UID)| Count(Table4.UID)

我通过一个INNER JOIN成功获得了准确的计数,如下所示:

SELECT g.UID, Table1.Name, COUNT(s.UID) AS CountTable2
FROM Table1 AS g INNER JOIN Table2 AS s ON s.FK_Table1 = g.UID
GROUP BY g.UID, g.Name

例如,Table1中的一项在Table2中获得2个引用,在Table3中获得3个引用,结果我得到2个,这是正确的。

[当我尝试添加另一层计数时,我做了如下操作:

SELECT g.UID, g.Name, COUNT(s.UID) AS CountTable2, COUNT(p.UID) AS CountTable3
FROM (Table1 as g
INNER JOIN Table2 AS s ON s.FK_Table1 = g.UID)
INNER JOIN Table3 AS p ON p.FK_Table2 = s.UID
GROUP BY g.UID, g.Name, CountTable2, CountTable3

在我之前的示例中,我得到的不是3和3,而不是CountTable2为2和CountTable3为3。

我读到这是Access的预期行为,但我没有找到使它起作用的方法。

我对这个问题有所帮助:Inner join with count on three tables

非常感谢您的帮助。

sql ms-access count access-vba inner-join
1个回答
0
投票

总计之前加入:

SELECT g.UID, g.Name, s.CountTable2, p.CountTable3
FROM (Table1 g LEFT JOIN
      (SELECT s.FK_Table1, COUNT(*) as CountTable2
       FROM Table2
       GROUP BY s.FK_Table1
      ) AS s
      ON s.FK_Table1 = g.UID
     ) LEFT JOIN
     (SELECT s.FK_Table1, COUNT(*) as CountTable3
      FROM Table3 as p JOIN
           Table2 as s
           ON p.FK_Table2 = s.UID
      GROUP BY s.FK_Table1
     ) as p
     ON p.FK_Table1 = g.UID;
© www.soinside.com 2019 - 2024. All rights reserved.