2012-06-07 69 views
0

的我使用下面的查詢將兩個表連接在一起:內連接返回大量重複

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.

任何人都可以看到爲什麼這個查詢產生這麼大的不匹配?

+1

你可以把你的表的一部分在SQL小提琴(http://sqlfiddle.com/)有一個更好的想法你的問題? – jcho360

+0

你爲什麼認爲這是不匹配的? – Quassnoi

回答

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表2 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

+1

謝謝。我修正了一些例子,以便'DISTINCT'使結果不同。 – Ruben

0

您在任一表格中是否有重複的ScanName值?如果是這樣,那麼SQL將爲每個匹配返回一行,這會使行數非常快地膨脹。 (例如,如果在第一個表中有3行具有給定值,並且第二行中具有該值的6行,則SQL將返回18行)。

0

如果patchtest_withip中有多條記錄符合您從patchtest_withsev加入的條件,那麼您可以得到類似的結果。根據調查結果你得到我會說有23-24紀錄patchtest_withip具有相同ScanNamepatchtest_withsev

0

如果有99個條目中的每個表中的每個記錄,假設沒有唯一值scanName,您的結果中可能有99x99 = 9801條目。

如果您正在獲取真正的重複項,請嘗試SELECT DISTINCT。