具有多个连接的计数不正确

时间:2014-01-31 15:24:20

标签: sql sql-server-2005

当我使用多个“联接”时,我的计数不正确。它应该只显示3作为总数,但它总共返回134。将COUNT用于多个“连接”的正确方法是什么?

SELECT  r.Field1
      , Total = COUNT(r.Field1)
FROM    Location1.dbo.Table1 r ( NOLOCK )
        JOIN Location2.dbo.Table2 i ( NOLOCK ) ON r.Field1 = i.Field1
        JOIN Location3.dbo.Table3 rt ( NOLOCK ) ON rt.Field1 = i.Field1
                                                   AND rt.Field2 = r.Field2
WHERE   r.Field3 = '40'
        AND r.Field4 = 'H'
        AND r.Field1 = '516'
        AND CONVERT(CHAR(10), r.TIMESTAMP, 101) = CONVERT(CHAR(10), GETDATE(), 101)
GROUP BY r.Field1

1 个答案:

答案 0 :(得分:2)

这就是加入工作的方式。您可以获得连接结果的总结果数。因此,即使原始表只有一行符合您的条件,COUNT中的JOIN也可能因一对多关系而产生数百个结果。您可以通过更改查询来了解原因:

SELECT  *
FROM    Location1.dbo.Table1 r ( NOLOCK )
        JOIN Location2.dbo.Table2 i ( NOLOCK ) ON r.Field1 = i.Field1
        JOIN Location3.dbo.Table3 rt ( NOLOCK ) ON rt.Field1 = i.Field1
           AND rt.Field2 = r.Field2
WHERE   r.Field3 = '40'
        AND r.Field4 = 'H'
        AND r.Field1 = '516'
        AND CONVERT(CHAR(10), r.TIMESTAMP, 101) = CONVERT(CHAR(10), GETDATE(), 101)

这将返回所有表中的所有行,您将看到134行。如果你对总数不感兴趣,那么就不要进行连接 - 因为你说没有连接的查询会给你预期的结果3.