Внутреннее соединение SQL возвращает НАМНОГО больше строк, чем ожидалось

Следующий запрос возвращает> 7000 строк, когда каждая таблица имеет только 340 строк.

SELECT Config.Spec, TempTable.Spec FROM Confg INNER JOIN TempTable on Config.Spec = TempTable.Spec

Почему это произошло? Если ВНУТРЕННЕЕ СОЕДИНЕНИЕ возвращает строку только в том случае, если в обеих таблицах есть совпадение, то почему оно возвращает несколько строк для совпадения.


person personaelit    schedule 15.11.2010    source источник


Ответы (2)


Если имеется более одной строки с одинаковым значением Spec в TempTable для одного и того же значения Spec в Confg, вы получите повторяющиеся строки, и наоборот.

person D'Arcy Rittich    schedule 15.11.2010
comment
Это ответ, но я хотел бы понять, почему SQL ведет себя таким образом. Если я также выберу Config.uid, я все равно получу несколько строк - я думаю, что на самом деле я ищу SELECT DISTINCT LEFT JOIN. Спасибо за ответ в любом случае. - person personaelit; 15.11.2010
comment
@Jim: он ведет себя таким образом, потому что это язык, основанный на наборах, и это оказалось наиболее полезным поведением. Если бы это не работало таким образом, как бы вы могли, например, объединить таблицы Category и Product, чтобы найти все продукты в категории? Вы бы предложили, чтобы при совпадении возвращалась только одна строка? - person D'Arcy Rittich; 15.11.2010
comment
Поскольку я не компьютерный ученый, я не в состоянии что-либо предложить :). Спасибо за понимание, хотя, теперь это имеет смысл для меня. - person personaelit; 15.11.2010

Являются ли значения поля Spec неуникальными? Это может объяснить, почему запрос возвращает слишком много результатов; с дубликатами вы получаете эффективное перекрестное произведение для них.

person Ritsaert Hornstra    schedule 15.11.2010