Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Запрос с левым соединением

v7: Запрос с левым соединением
Я
   HighFly
 
14.01.13 - 10:35
Всем доброго времени суток!
Есть такой запрос:

|SELECT
|   Основной.Сотрудник [Сотрудник $Справочник.Сотрудники],
|   $ПоследнееЗначение.Сотрудники.Подразделение(Сотрудник,:КонецПериода) as [Отдел $Справочник.Подразделения],
|   Основной.КоличествоДнейОтпуска,
|   Основной.ДнейОтозвано,
|   (select top 1 k.date
|    from _1SConst k 
|    left join $Справочник.Должности Долж1 on Долж1.id = k.value
|       where (k.ID = $ИсторияРеквизита.Сотрудники.Должность)
|     and (k.OBJID = Основной.Сотрудник)
|      order by k.date) Стаж
|FROM
|   (SELECT Сотр.ID as Сотрудник
|          , SUM(Документы.КолДней) КоличествоДнейОтпуска
|       , SUM(CAST(Документы.ОкончаниеОтзыва as float) - Cast(Документы.НачалоОтзыва AS float) + 1) ДнейОтозвано 
|       FROM $Справочник.Сотрудники Сотр
|        LEFT JOIN (Select 
|              $ДокОтпускПред.КоличествоДнейОтпуска as КолДней, 
|              $ДокОтпускПред.Сотрудник as Сотрудник ,
|              $ДокОтзыва.Начало as НачалоОтзыва, 
|              $ДокОтзыва.Окончание as ОкончаниеОтзыва
|            FROM $Документ.ПриказПоОтпуску ДокОтпускПред
|              LEFT JOIN $Документ.ПриказОбОтзыве ДокОтзыва On $ДокОтзыва.ДокОснование = ДокОтпускПред.IDDOC and $ДокОтзыва.ПродлятьОтпуск=0
|              INNER JOIN _1SJOURN AS j1 ON ДокОтпускПред.IDDOC = j1.IDDOC and (j1.Closed & 1 = 1)
|              Where $ДокОтпускПред.НачалоПериода >= :НачалоПериода and $ДокОтпускПред.НачалоПериода <= :КонецПериода 
|              ) Документы
|          ON Сотр.ID = Документы.Сотрудник
|                    
|    WHERE $ПоследнееЗначение.Сотрудники.СостояниеФизЛица(Документы.Сотрудник,:ДатаАктуальности) = :СотрудникОсновной
|          and Сотр.id = $Сотр.ОсновнойЭлемент
|     GROUP BY 
|     Сотр.ID
|     ) Основной
 

По идее в нем должны отбираться все элементы справочника "сотрудники", но на деле он отбирает только те, у которых правая часть соединения не равна NULL. Если убрать условие на периоды в подзапросе Документы, то выводятся все элементы справочника, но правая часть, естественно, неправильная. Долго проверял запрос, никак не могу найти ошибку, может быть кто-то подскажет?
 
 
   Дык ё
 
1 - 14.01.13 - 10:39
добавь к условию 

or Документы.Сотрудник is null
   Ёпрст
 
2 - 14.01.13 - 10:40
(0) ясен пень, ты вот этим:

  WHERE $ПоследнееЗначение.Сотрудники.СостояниеФизЛица(Документы.Сотрудник,:ДатаАктуальности)

превратил left join 
в inner join
   Ёпрст
 
3 - 14.01.13 - 10:41
всё собственно, дальше думай, нужно ли тебе оно именно так.
   HighFly
 
4 - 14.01.13 - 10:57
(2) Спасибо! Исправил.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует