SQL - неожиданное изменение количества результатов после добавления левого соединения - PullRequest
1 голос
/ 26 июля 2011

Следующий запрос:

SELECT Assets.Id, Assets.Description
FROM Assets
WHERE CaseNumber = 1265

дает 29 результатов.

После добавления следующего левого соединения в другую таблицу:

SELECT Assets.Id, Assets.Description
FROM Assets
LEFT JOIN StockShares ON StockShares.AssetId = Assets.AssetId
WHERE CaseNumber = 1265

Я до 3. Это полностью отбросило меня. Я думал, что знаю о SQL?

Кто-нибудь может подтвердить, что этот результат не совсем верен, или объяснить, почему число результатов сократилось?

Ответы [ 3 ]

2 голосов
/ 26 июля 2011

Если все, что вы добавили в запрос, это LEFT JOIN (с предложением ON), то число результатов должно остаться прежним или увеличить - если ни одна строка не соответствует критериям объединения, счетчик результатов должен оставаться статическим. Если в правой таблице несколько совпадающих строк, то для одной строки в левой таблице счетчик результатов увеличится.

Если вы добавите LEFT JOIN, но также добавите новые условия в ваши предложения WHERE или HAVING, вы можете эффективно преобразовать свой LEFT JOIN в INNER JOIN. В таком случае количество результатов, очевидно, может упасть. Необходимо помнить, что все предложение WHERE (также HAVING) должно быть истинным, чтобы результат отображался в окончательном наборе результатов. Если вы ссылаетесь на столбцы с правой стороны LEFT JOIN, то вы должны рассмотреть, что произойдет, если такие столбцы NULL.

0 голосов
/ 17 марта 2015

Я не верю, что это возможно, учитывая код, который вы показываете. Здесь что-то еще происходит.

0 голосов
/ 25 октября 2013

Заменить WHERE на AND.

WHERE применяется после объединения;И применяется во время объединения.

...