2012-06-07 32 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。