我在count(distinct u.uid)
以下查询,当我在下面运行查询时,它继续执行状态,如果我运行count(1)
,那么我得到的结果为236.我不明白为什么{{1没有返回结果。
请注意此查询在SQL Server的其他环境中运行,不确定为什么不在SQL Server 2016中工作(我不确定它是否特定于2016环境)
count(distinct u.uid)
答案 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