Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема INNER JOIN OR LEFT OR RIGHT   (число прочтений - 3746 )
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
INNER JOIN OR LEFT OR RIGHT  
25. Января 2007 :: 09:34
Печать  
Стандартный пример из описания 1С++
объясните почему LEFT JOIN а не INNER JOIN



ТекстЗапроса = "
|SELECT
|  Выборка.Склад as [Склад $Справочник.Склады]
|  СпрС.Descr as Склад_Наименование,
|  Выборка.Товар as [Товар $Справочник.Номенклатура],
|  СпрН.Descr as Товар_Наименование
|  Выборка.ИтогПоСкладам as ИтогПоСкладам,
|  Выборка.ИтогПоТоварам as ИтогПоТоварам,
|  Выборка.Количество as Количество
|FROM
|(
|SELECT
|  Рег.Склад as Склад,
|  Рег.Товар as Товар,
|  GROUPING(Рег.Склад) as ИтогПоСкладам,
|  GROUPING(Рег.Товар) as ИтогПоТоварам,
|  SUM(Рег.КоличествоОстаток) as Количество
|FROM
|  $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|                               Склад = :ВыбСклад AND Товар = @Товар,
|                               (Склад, Товар), (Количество)) as Рег
|GROUP BY
|  Рег.Склад, Рег.Товар WITH ROLLUP
|) as Выборка
|LEFT JOIN
|  $Справочник.Склады as СпрС ON СпрС.ID = Выборка.Склад
|LEFT JOIN
|  $Справочник.Номенклатура as СпрН ON СпрН.ID = Выборка.Товар
|ORDER BY
|  СпрС.Descr, СпрН.Descr, Выборка.ИтогПоСкладам DESC, ыборка.ИтогПоТоварам DESC
|";
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: INNER JOIN OR LEFT OR RIGHT  
Ответ #1 - 25. Января 2007 :: 09:48
Печать  
В случае INNER выпадут результаты с пустыми либо отсутствующими в базе складами и/или товарами.

Если таких результатов гарантированно нет, можно и INNER
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: INNER JOIN OR LEFT OR RIGHT  
Ответ #2 - 25. Января 2007 :: 09:59
Печать  
Quan писал(а) 25. Января 2007 :: 09:48:
В случае INNER выпадут результаты с пустыми либо отсутствующими в базе складами и/или товарами.

Если таких результатов гарантированно нет, можно и INNER


выпадут В отчет или ИЗ отчета
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: INNER JOIN OR LEFT OR RIGHT  
Ответ #3 - 25. Января 2007 :: 10:10
Печать  
ИЗ.
Т.е. будут отсутствовать в результатах запроса
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: INNER JOIN OR LEFT OR RIGHT  
Ответ #4 - 25. Января 2007 :: 10:13
Печать  
а вот тут помочь можешь?
http://www.1cpp.ru/forum/YaBB.pl?num=1168919847/20
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: INNER JOIN OR LEFT OR RIGHT  
Ответ #5 - 25. Января 2007 :: 12:44
Печать  
Иногда еще left применяют вместо inner, чтобы избавить оптимизатор от выбора ведущей таблицы.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: INNER JOIN OR LEFT OR RIGHT  
Ответ #6 - 25. Января 2007 :: 14:40
Печать  
1С вроде всегда лепит лефт (точно не помню)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Menahem
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 10
Зарегистрирован: 27. Июня 2006
Re: INNER JOIN OR LEFT OR RIGHT  
Ответ #7 - 02. Февраля 2007 :: 08:04
Печать  
Цитата:
1С вроде всегда лепит лефт (точно не помню)


Нет, не всегда.
Иннер нужно использовать только тогда, когда есть уверенность, что каждой записи одной из объединяемых таблиц всегда найдётся соответствующая запись в другой объединяемой таблице, либо когда нужно, чтобы в выборке участвовали только такие записи.
В остальных случаях используют левое или правое объединение.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: INNER JOIN OR LEFT OR RIGHT  
Ответ #8 - 02. Февраля 2007 :: 16:00
Печать  
Шо к чему?  Подмигивание
Я говорю 1С приводит соединения через точку к виду лефт джоин
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать