内部联接返回大量重复项

时间:2012-06-07 20:08:57

标签: mysql inner-join

我使用以下查询将两个表连接在一起:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

两个表中的ScanName都有重复值吗?如果是这样,则SQL将为每个匹配返回一行,这会非常快速地增加行数。 (例如,如果第一个表中有3个具有给定值的行,而第二个表中有6个具有该值的行,则SQL将返回18行)。

答案 2 :(得分:0)

如果patchtest_withip中有多条记录符合您从patchtest_withsev加入的条件,则可以得到类似的结果。根据您得到的结果,我会说patchtest_withip中有23-24条记录与ScanName

中的每条记录具有相同的patchtest_withsev

答案 3 :(得分:0)

如果每个表中有99个条目,假设scanName没有唯一值,则结果中可能包含99x99 = 9801个条目。

如果您获得真正的重复项,请尝试SELECT DISTINCT。