我使用以下查询将两个表连接在一起:
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.
任何人都可以看到为什么这个查询产生如此大的不匹配?
答案 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。