SQL内部联接在MS ACCESS中提供不正确的计数值

时间:2016-11-29 21:38:19

标签: ms-access join count

我正在尝试使用join连接MS Access中的多个表来获取计数值。但我不知道它给出错误的计数值。如果我尝试单独加入它们,那么它会给我正确的计数值。

我有3张桌子。表2和表3是独立的并且连接到表1.测试2和测试3基本上是文本值,我想计算行。

表1(ID1(主键),名称) 表2(ID2(主键),ID1(外键),Test2) 表3(ID3(Orimary Key),ID1(外键),Test3)

我从MS Access获得的查询如下:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { 
                controller = "Home", 
                action = "Index", 
                id = UrlParameter.Optional }
        );

但是这给了我错误的计数值。 有人可以帮助我。

感谢。

3 个答案:

答案 0 :(得分:0)

如果我可以假设test2和测试3对每条记录都是唯一的(或许最好算上PK?)

SELECT Table1.ID1
     , Count(distinct Table2.Test2) AS CountOfTest2
     , Count(distinct Table3.Test3) AS CountOfTest3
FROM Table1 
INNER JOIN Table2 
  ON Table1.ID1 = Table2.ID2
INNER JOIN Table3 
  ON Table1.ID1 = Table3.ID3
GROUP BY Table1.ID1;

或者,您可能必须在连接之前获取计数,但使用内联视图。如果MSSQL SERVER但Access需要内联视图,则可以使用窗口函数。

SELECT A.ID1
     , B.CountOfTest2
     , C.CountOfTest3
FROM Table1 A
INNER JOIN (SELECT Table2.ID2, count(table2.test) as CountOfTest2
            FROM Table2
            GROUP BY Table2.id) B
  ON Table1.ID1 = B.ID2
INNER JOIN (SELECT Table3.id, count(table3.test3) as CountOfTest3
            FROM Table3 
            GROUP BY Table3.id) C
  ON B.ID1 = C.ID3
GROUP BY A.ID1;

答案 1 :(得分:0)

当我单独使用它时,它会给我正确的计数值:

SELECT Table1。 ID1,Count(Table2.Test2)AS CountOfTest2 FROM Table1 INNER JOIN Table2 ON Table1.ID1 = Table2.ID1 GROUP BY Table1.ID1;

SELECT Table1。 ID1,Count(Table3.Test3)AS CountOfTest3 FROM Table1 INNER JOIN Table3 ON Table1.ID1 = Table3.ID1 GROUP BY Table1.ID1;

但是当我尝试在MS Acces中加入Table1,Table2和Table 3时,它给出了不正确的计数值。

SELECT Table1。 ID1,Count(Table2.Test2)AS CountOfTest2,Count(Table3.Test3)AS CountOfTest3 FROM(Table1 INNER JOIN Table2 ON Table1.ID1 = Table2.ID1)INNER JOIN Table3 ON Table1。 ID1 = Table3.ID1 GROUP BY Table1.ID1

根据我的理解,它在括号中取第一个查询的计数值,并将其与另一个内连接的计数值相乘。

我尝试过很多东西,但不知道该怎么做。 Access出于某种原因添加括号。

答案 2 :(得分:0)

是的,当我尝试这样做时,我遇到了同样的问题。只需使用双sql函数来抵消html,你应该很好。一旦查询加倍,它就会像C ++配额语句一样反应。如果失败,您可以随时量化源字段以适应表格限制。它实际上是一块蛋糕我希望这有帮助。