其他内连接修改先前计算的结果

时间:2013-12-10 15:20:56

标签: sql oracle join sqlplus

我在sql plus查询中使用count()函数时遇到问题..比如说

    SELECT B.ID COUNT(S.BRANCH_ID) FROM BRANCH B 
    INNER JOIN STAFF S ON S.BRANCH_ID = B.ID
    GROUP BY B.ID;

从这样做我将得到结果

            b.id             count
             1                  6
             2                  6
             3                  6
             4                  7
             5                  6

这很好..但是如果我甚至添加一个额外的内部联接,我会得到完全不同的错误结果..所以如果我举个例子..

           SELECT COUNT(S.BRANCH_ID) FROM BRANCH B 
           INNER JOIN STAFF S ON S.BRANCH_ID = B.ID
           INNER JOIN TOOL_STOCK TS ON TS.BRANCH_ID = B.ID
           GROUP BY B.ID;

现在我得到的结果将是......

           b.id             count
            1                 96
            2                 96
            3                 96
            4                112
            5                 96

为什么这样,我该如何阻止它?干杯!

2 个答案:

答案 0 :(得分:1)

尝试

SELECT B.ID, COUNT(DISTINCT S.STAFF_ID) FROM BRANCH B 
INNER JOIN STAFF S ON S.BRANCH_ID = B.ID
INNER JOIN TOOL_STOCK TS ON TS.BRANCH_ID = B.ID
GROUP BY B.ID;

用STAFF表中的主键字段替换S.STAFF_ID。

您的问题是COUNT函数在连接并返回所有行后返回与GROUP BY子句匹配的行数。

在您的初始查询中,您将找到每个分支的员工数量。在第二个分支中,员工数量乘以库存项目数。

答案 1 :(得分:1)

当您添加第二个联接时,您将获得每个分支的STAFF + TOOLS计数。

如果您想要返回所有数据,则可能需要添加子查询,但只需要计算一种记录类型。

我认为你问题的关键在于,你实际上想要算什么呢?