Упреждающие извинения за бессмысленные имена таблиц / столбцов в этих запросах. Если вы когда-либо работали с базой данных Remedy для БД, вы поймете.
У меня проблема с тем, что Count Distinct возвращает нулевое значение, когда я подозреваю, что фактическое значение должно быть где-то в 20-х годах (мне кажется, 23). Ниже приведен ряд запросов и их возвращаемых значений.
SELECT count(distinct t442.c1)
FROM t442, t658, t631
WHERE t442.c1 = t658.c536870930
AND t442.c200000003 = 'Network'
AND t442.c536871139 < 2
AND t631.c536870913 = t442.c1
AND t658.c536870925 = 1
AND (t442.c7 = 6 OR t442.c7 = 5)
AND t442.c536870954 > 1141300800
AND (t442.c240000010 = 0)
Результат = 497.
Добавьте таблицу t649 и убедитесь, что в ней есть записи, связанные с таблицей t442:
SELECT COUNT (DISTINCT t442.c1)
FROM t442, t658, t631, t649
WHERE t442.c1 = t658.c536870930
AND t442.c200000003 = 'Network'
AND t442.c536871139 < 2
AND t631.c536870913 = t442.c1
AND t658.c536870925 = 1
AND (t442.c7 = 6 OR t442.c7 = 5)
AND t442.c536870954 > 1141300800
AND (t442.c240000010 = 0)
AND t442.c1 = t649.c536870914
Результат = 263.
Отфильтровать записи в таблице t649, где столбец c536870939 <= 1: </p>
SELECT COUNT (DISTINCT t442.c1)
FROM t442, t658, t631, t649
WHERE t442.c1 = t658.c536870930
AND t442.c200000003 = 'Network'
AND t442.c536871139 < 2
AND t631.c536870913 = t442.c1
AND t658.c536870925 = 1
AND (t442.c7 = 6 OR t442.c7 = 5)
AND t442.c536870954 > 1141300800
AND (t442.c240000010 = 0)
AND t442.c1 = t649.c536870914
AND t649.c536870939 > 1
Результат = 24.
Фильтр в операторе HAVING:
SELECT COUNT (DISTINCT t442.c1)
FROM t442, t658, t631, t649
WHERE t442.c1 = t658.c536870930
AND t442.c200000003 = 'Network'
AND t442.c536871139 < 2
AND t631.c536870913 = t442.c1
AND t658.c536870925 = 1
AND (t442.c7 = 6 OR t442.c7 = 5)
AND t442.c536870954 > 1141300800
AND (t442.c240000010 = 0)
AND t442.c1 = t649.c536870914
AND t649.c536870939 > 1
HAVING COUNT (DISTINCT t631.c536870922) =
COUNT (DISTINCT t649.c536870931)
Результат = ноль.
Если я запускаю следующий запрос, я не вижу ничего в списке результатов, который объяснил бы, почему я не получаю никакого возвращаемого значения. Это верно, даже если я удаляю DISTINCT из SELECT. (Я получаю 25 и 4265 строк данных обратно соответственно).
SELECT DISTINCT t442.c1, t631.c536870922, t649.c536870931
FROM t442, t658, t631, t649
WHERE t442.c1 = t658.c536870930
AND t442.c200000003 = 'Network'
AND t442.c536871139 < 2
AND t631.c536870913 = t442.c1
AND t658.c536870925 = 1
AND (t442.c7 = 6 OR t442.c7 = 5)
AND t442.c536870954 > 1141300800
AND (t442.c240000010 = 0)
AND t442.c1 = t649.c536870914
AND t649.c536870939 > 1
У меня есть несколько других мест, где у меня есть запрос, настроенный точно так же, как и тот, который возвращает нулевое значение, и он прекрасно работает - возвращая используемые числа, которые являются правильными значениями. Я должен предположить, что все, что уникально в этой ситуации, связано с данными, а не с фактическим запросом, но я не уверен, что искать в данных, чтобы объяснить это. Мне не удалось найти нулевые значения в необработанных данных перед агрегацией. Я не знаю, что еще могло бы вызвать это.
Буду признателен за любую помощь.