-1

INSERT2 つのテーブルからデータを取得し、そのデータを 3 番目のテーブルに挿入するクエリがあります。COUNTクエリの一部が期待する結果を返していないことを除いて、すべてが正常に機能しているようです。

このクエリが実行する最初のテーブル セットは、MIUsInGrid1000(行数 = 1) とResults1000(行数 = 24) です。クエリの一部から返される数値は、Count予想していた 1 ではなく 24 です。

次のテーブル セットは、MIUsInGrid1000 (行数 = 3) とResults1000 (行数 = 30) です。クエリの一部から返される数値は、Count予想していた 3 ではなく 90 です。

2 つのカウントの積が返されているようですが、その理由がわかりません。テーブルへの参照を取り出すとResults、クエリは期待どおりに機能します。これの少なくとも一部がどのように機能するかを誤解していると思います。これが期待どおりに機能しない理由を誰かが説明できますか?

strQuery1 = "Insert Into MIUsInGridAvgs (NumberofMIUs, ProjRSSI, RealRSSI, CenterLat, CenterLong)  " & _
            "Select  Count(MIUsInGrid" & i & ".MIUID), Avg(MIUsInGrid" & i & ".ProjRSSI), Avg(MIUsInGrid" & i & ".RealRSSI), Avg(Results" & i & ".Latitude), Avg(Results" & i & ".Longitude) " & _
           "From MIUsInGrid" & i & ", Results" & i & " "
4

3 に答える 3

3

2 つのテーブルを結合する場合、1 行が 1 行で、もう 1 行が 24 行である場合、結果セットが 24 行になる可能性があることは論理的に思えます。

SQL に WHERE 句が含まれていないことに気付きましたが (おそらく簡潔にするため)、テーブル間で CROSS JOIN (またはデカルト結合) を実行している場合、これは予期しない結果をもたらします。

COUNT 関数は、データベース内のすべての行をカウントします。「個別の」ID がいくつあるかを判断するには、Tomalak が提供する回答を使用できます。

于 2009-07-15T15:21:27.617 に答える
2

これはあなたの差し迫った問題を解決するはずです

Count(DISTINCT MIUsInGrid" & i & ".MIUID)

ネイキッドCOUNT関数は、を使用して動作を切り替えるように指示しない限り、個別の値ではなく非値NULLをカウントします。DISTINCT

2 つのテーブルを同じように結合すると (デカルト積を作成します)、結果の行数は、もう一方のテーブルの行数の 1 倍になります。

これにより、結合条件が欠落している疑いが生じます。

それとは別に、名前でインデックス付けされた明らかに同一のテーブルが多数あることに当惑しています。これは、データベースの重大な設計上の欠陥であることは間違いありません。

于 2009-07-15T15:19:16.013 に答える
1

これらのことを理解する通常の方法は、最初に集計を使用して結果セットがどうなるかを確認することではありません。次に、集計関数の追加を開始します。

于 2009-07-15T15:21:55.557 に答える