Как LEFT OUTER JOIN может вернуть больше записей, чем существует в левой таблице? - PullRequest
135 голосов
/ 27 мая 2009

У меня есть очень простое LEFT OUTER JOIN, чтобы вернуть все результаты из левой таблицы и некоторую дополнительную информацию из гораздо большей таблицы. Левая таблица содержит 4935 записей, но когда я оставляю ее в другой таблице, количество записей значительно увеличивается.

Насколько мне известно, это абсолютное Евангелие, что LEFT OUTER JOIN вернет все записи из левой таблицы с совпадающими записями из правой таблицы и нулевые значения для любых строк, которые не могут быть сопоставлены, поэтому я так понимаю что должно быть невозможно вернуть больше строк, чем существует в левой таблице, но все происходит одинаково!

SQL-запрос следует:

SELECT     SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM         SUSP.Susp_Visits LEFT OUTER JOIN
                      DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum

Возможно, я допустил ошибку в синтаксисе или мое понимание LEFT OUTER JOIN неполное, надеюсь, кто-то может объяснить, как это могло произойти?

Постскриптум

Спасибо за отличные ответы, мое понимание LEFT OUTER JOINS теперь намного лучше, может ли кто-нибудь предложить способ, которым этот запрос может быть изменен так, чтобы я получал только столько записей, сколько существует в левой таблице?

Этот запрос предназначен исключительно для генерации отчета, а повторяющиеся совпадения просто запутывают вопросы.

/ Postscript

Ответы [ 11 ]

1 голос
/ 27 мая 2009

Кажется, что в таблице DATA.Dim_Member имеется несколько строк на строку SUSP.Susp_Visits.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...