これらのクエリでの無意味なテーブル/列名に対する先制的な謝罪。RemedyのDBバックエンドを使用したことがある場合は、理解できます。
実際の値が20年代のどこかにあると思われるときに、Count Distinctがnull値を返すという問題が発生しています(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。
列c536870939<=1であるテーブルt649のレコードをフィルターで除外します。
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)
結果=null。
次のクエリを実行すると、結果リストに、どのような種類の戻り値も得られない理由を説明するものが何も表示されません。これは、SELECTからDISTINCTを削除した場合でも当てはまります。(それぞれ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
null値を返すクエリとまったく同じようにクエリを設定し、完全に正常に機能する場所が他にもいくつかあります。正しい値である使用可能な数値を返します。この状況で一意なものはすべて、実際のクエリではなくデータに関連していると想定する必要がありますが、それを説明するためにデータで何を探すべきかわかりません。集計前に生データでnull値を見つけることができませんでした。他に何がこれを引き起こすのかわかりません。
どんな助けでもいただければ幸いです。