当我使用多个“联接”时,我的计数不正确。它应该只显示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
答案 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.