2012-06-07 1 views
0

Я использую следующий запрос, чтобы соединить две таблицы вместе:Inner присоединиться возвращения большого числа дубликатов

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, которые имеют то же ScanName в каждой записи в patchtest_withsev

0

Если есть 99 записей в каждой таблице, при условии, что не было никаких уникальных значений для scanName, вы могли бы иметь 99x99 = 9801 записей в результатах.

Если вы получаете настоящий дубликат, попробуйте SELECT DISTINCT.

Смежные вопросы