Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос с Left Outer Join  [new]
=Sergey==
Member

Откуда:
Сообщений: 62
Здравствуйте

такой вопрос

есть таблица А
хранящая такие строки

Код Детали СКлад Цех Еден Измер
94310100001114 41710 41007 23,00

по набору комбинаций таких полей записи уникальны
т.е не существует в талице A две строки
с одинаковым набором значений
по указанным полям

далее пытаюсь объеденить со Таблицей Б

Там Записи такие

Склад Код Детали Еден Изм Кол-во(month_rem)

41710 94310100001114 23,0 116,00
41710 94310100001114 23,0 1,00

в этой таблице видно может быть
несколько строк с одинаковым кодом детали


делаю
такой запрос

select a.*, b.month_rem
from #TabDetalMat1 as a
LEFT OUTER JOIN ##_sh as b ON
a.koddet = b.koddet
AND a.post = b.shcode
AND a.ei = b.ei
WHERE potr = '41007'


результат выполнения запроса таков:

94310100001114 41710 41007 23,00 116,00
94310100001114 41710 41007 23,00 0,00


Вопрос
поясните мне пожалуйста
почему вот так получается, что добавляются записи также из таблицы B
ведь я делаю LEFT OUTER JOIN и следователь как я понимаю
(принци данной выборки используя LEFT OUTER JOIN судя по BOL )
должны выбраться только записи из таблицы A,
а фактически записи добавляются из таблицы B

(понятно что можно использовать суммирование
в таблице B для приведения к одной
строчке, но мне охото понять почему так осуществляется данная выборка)

и как сделать так что при осуществление выборки
данные брались только из таблицы A
в независемости от количества строк таблицы B

Подскажите пожалуйста
26 май 05, 05:59    [1571383]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с Left Outer Join  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Не так понимается левое внешнее объединение, как должно - в результате его работы запрос должен вернуть ВСЕ строки из таблицы, которая слева, даже если нет объединяемых у той, что справа (для левого объединения). И, нигде в теории не говорится, что в результате запроса должно возвращаться ровно столько строк, сколько у таблицы слева, да и по какому критерию такой возврат должен осуществляться.
Так, что, если нужны агрегатные значения из таблицы справа - в подзапрос её с группировкой по объединяемым колонкам и с агрегатом, по суммарной.
26 май 05, 07:56    [1571421]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с Left Outer Join  [new]
Садовод
Member

Откуда:
Сообщений: 36
=Sergey==

Вопрос
поясните мне пожалуйста
почему вот так получается, что добавляются записи также из таблицы B
ведь я делаю LEFT OUTER JOIN и следователь как я понимаю
(принци данной выборки используя LEFT OUTER JOIN судя по BOL )
должны выбраться только записи из таблицы A,
а фактически записи добавляются из таблицы B

(понятно что можно использовать суммирование
в таблице B для приведения к одной
строчке, но мне охото понять почему так осуществляется данная выборка)


Принцип такой: КАЖДАЯ запись из A сравнивается с КАЖДОЙ записью из B на предмет выполнения условия после on. Значит, если какой-то строке из A по on подходят две (три, десять, ...) строки из B, то в результирующем соединении это будет давать две (три, десять, ...) строк.

=Sergey==

и как сделать так что при осуществление выборки
данные брались только из таблицы A
в независемости от количества строк таблицы B


А Вы не могли бы подробнее объяснить, что Вы хотите получить в результате этой выборки?
26 май 05, 07:59    [1571422]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить