Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Непонятки с left join (число прочтений - 1199 )
Vlad
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 21. Февраля 2020
Непонятки с left join
21. Февраля 2020 :: 12:36
Печать  
Имеется простой запрос на dbf
     |SELECT
     |      Спр.ID                              as [Участок $Справочник.Участки],
     |      Рег.IDDoc                        as [Док $Документ],
     |  Рег.IDDocDef                  as Док_вид,
     |      Sum($Рег.Членские)   as Членские,
     |      Sum($Рег.ЭлЭнергия)  as ЭлЭнергия,
     |      Sum($Рег.Целевой)    as Целевой,
     |      Sum($Рег.Пеня)               as Пеня,
     |      Sum($Рег.Прочее)     as Прочее,   
     |      Sum($Рег.Квт)        as Квт
     |FROM
     |      $Справочник.Участки as Спр
     |LEFT JOIN
     |      $Регистр.Взносы as Рег ON Спр.ID = $Рег.Участок 
     |WHERE
     |      ($Рег.датазачета BETWEEN :НачДата~~ AND :КонДата~~)
     |      AND (Спр.IsMark = '')
     |GROUP BY
     |      Спр.ID, Рег.IDDoc, Рег.IDDocDef
     |ORDER BY
     |      Спр.ID

т.е. к справочнику участки присоединяются данные из регистра оплат. Я ожидал что выведутся все участка, а выводятся только те, по которым были какие-либо оплаты. Непонятно почему так? Причем LEFT можно менять на другие - результат тот же!!!
  
Наверх
 
IP записан
 
Vlad
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 21. Февраля 2020
Re: Непонятки с left join
Ответ #1 - 21. Февраля 2020 :: 12:39
Печать  
Если же убрать левое соединение - т.е. попросить вывести только справочник участки, то все нормальноПечаль
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Непонятки с left join
Ответ #2 - 21. Февраля 2020 :: 15:11
Печать  
Vlad писал(а) 21. Февраля 2020 :: 12:36:
Имеется простой запрос на dbf


А как иначе должен работать этот фильтр?
Код (SQL)
Выбрать все
   WHERE
         ($Рег.датазачета BETWEEN :НачДата~~ AND :КонДата~~)
         AND (Спр.IsMark = '')
 



Тебе это условие нужно перенести в
Код (SQL)
Выбрать все
   LEFT JOIN
         $Регистр.Взносы as Рег ON Спр.ID = $Рег.Участок
 



Как то так
Тебе это условие нужно перенести в
Код (SQL)
Выбрать все
   LEFT JOIN
         $Регистр.Взносы as Рег ON Спр.ID = $Рег.Участок

 


  
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Непонятки с left join
Ответ #3 - 21. Февраля 2020 :: 15:13
Печать  
Vlad писал(а) 21. Февраля 2020 :: 12:36:
Имеется простой запрос на dbf


А как иначе должен работать этот фильтр?
Код (SQL)
Выбрать все
   WHERE
         ($Рег.датазачета BETWEEN :НачДата~~ AND :КонДата~~)
         AND (Спр.IsMark = '')
 


Он и отсекает.

Тебе это условие нужно перенести в
Код (SQL)
Выбрать все
   LEFT JOIN
         $Регистр.Взносы as Рег ON Спр.ID = $Рег.Участок
 



Как то так должно сработать:
Код (SQL)
Выбрать все
   LEFT JOIN
         $Регистр.Взносы as Рег ON Спр.ID = $Рег.Участок
         AND ($Рег.датазачета BETWEEN :НачДата~~ AND :КонДата~~)
         AND (Спр.IsMark = '')
 


  
Наверх
www  
IP записан
 
Vlad
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 21. Февраля 2020
Re: Непонятки с left join
Ответ #4 - 22. Февраля 2020 :: 17:02
Печать  
Мужики! Выручили по полной!!! 2 дня убил - сам ни хрена не понял! Круглые глаза Круглые глаза Круглые глаза
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать