Я переписываю запрос, чтобы лучше его прочитать:
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
. Вы могли бы получить 1
, если бы все 236 строк имели одинаковое значение, но вы не можете получить 0
.
Итак, возможно, вы имеете в виду, что запрос не возвращается. Если это так, то вы можете использовать explain
, чтобы увидеть, почему два плана выполнения отличаются.