0

次のクエリを使用して、2 つのテーブルを結合しています。

SELECT SDA.smachIPAddress,
DPP.ScanName,
DPP.pspplMSSeverity,
DPP.PatchMissing,
DPP.ScanDate
FROM patchtest_withsev DPP
INNER JOIN patchtest_withip SDA
ON DPP.ScanName =SDA.ScanName

2351行のデータを受信

すべてのレコードについて patchtest_withsev テーブルをクエリすると、99 のみが返され、patchtest_withip テーブルは 99 のみが返されます。

このクエリがこれほど大きな不一致を引き起こしている理由を誰でも理解できますか?

4

4 に答える 4

3

両方のテーブルに同じ値の行がいくつかあるようですScanName

例えば:

table1:
f1 | f2
 1 | a
 1 | b
 2 | c
 2 | c

table2:
f1 | f2
 1 | a
 1 | b
 2 | c

table1 INNER JOIN table2 ON table1.f1 = table2.f1 は次のようになります。

table1.f1 | table1.f2 | table2.f1 | table2.f2
        1 |         a |         1 |         a
        1 |         a |         1 |         b
        1 |         b |         1 |         a
        1 |         b |         1 |         b
        2 |         c |         2 |         c
        2 |         c |         2 |         c

結果で行が完全に重複しないようにするには、 を使用してみてくださいDISTINCT

于 2012-06-07T20:11:52.970 に答える
0

各テーブルに99のエントリがある場合、scanNameに一意の値がないと仮定すると、結果に99x99=9801のエントリが含まれる可能性があります。

真の複製を取得している場合は、SELECTDISTINCTを試してください。

于 2012-06-07T20:16:35.777 に答える
0

どちらかのテーブルにScanNameの値が重複していますか?その場合、SQLは一致するたびに1行を返します。これにより、行数が急速に増加します。(たとえば、最初のテーブルに特定の値を持つ3つの行があり、2番目のテーブルにその値を持つ6つの行がある場合、SQLは18行を返します)。

于 2012-06-07T20:12:14.690 に答える
0

patchtest_withip参加している基準に一致するレコードが複数ある場合、patchtest_withsevそのような結果が得られる可能性があります。得られた結果に基づいて、23〜24のレコードがあり、すべてのレコードpatchtest_withipと同じであると言えますScanNamepatchtest_withsev

于 2012-06-07T20:14:33.267 に答える