计数(不同)不适用于SQL Server 2016中的多个内部联接

时间:2018-05-07 10:04:56

标签: sql sql-server sql-server-2016

我在count(distinct u.uid)以下查询,当我在下面运行查询时,它继续执行状态,如果我运行count(1),那么我得到的结果为236.我不明白为什么{{1没有返回结果。

请注意此查询在SQL Server的其他环境中运行,不确定为什么不在SQL Server 2016中工作(我不确定它是否特定于2016环境)

count(distinct u.uid)

2 个答案:

答案 0 :(得分:0)

我正在重写查询,以便我可以更好地阅读:

SELECT COUNT(distinct u.uid) AS NOOFROWS 
FROM ABC u INNER JOIN
     (SELECT uemail
      FROM ABC
      GROUP BY uemail
      HAVING COUNT(1) = 1
     ) u2
     ON u.uemail = u2.uemail INNER JOIN
     PQR 
     ON u.uid = PQR.uid INNER JOIN
     XYZ p
     ON u.uid = p.uid ;

我将问题解释为给出0的查询,但COUNT(1)返回236但COUNT(DISTINCT u.uid)返回0是不可能的(除非SQL Server中存在错误)。仅当COUNT(DISTINCT)的所有值均为0时,u.uid才会返回NULL。由于u.uid中使用的是INNER JOIN,因此它不能是NULL。如果所有236行具有相同的值,则可以获得1,但您无法获得0

所以,也许你的意思是查询不会返回。如果是这种情况,那么您可以使用explain来查看两个执行计划不同的原因。

答案 1 :(得分:0)

检查下面的内部查询是否返回行?

SELECT uemail
FROM ABC
GROUP BY uemail
HAVING COUNT(1) = 1