Имя: Пароль:
1C
1С v8
Пустой результат запроса, если одна из временных таблиц пустая
,
0 poddex
 
20.04.17
09:18
Добрый день, уважаемые специалисты и гости форума! Нужна ваша помощь.
Сделал пакетный запрос - 2 запроса во временные таблицы, третий запрос - на основе этих временных таблиц. В чем проблема: если вторая временная таблица пустая (там отбор в ГДЕ по условию, и она может быть пустой), итоговый запрос ничего не возвращает, хотя выбор по полям вроде стоит. Где-то я нанубил, не понимаю, как соединять эти таблицы правильно. До кучи вопрос: если выбирать поля так, как я привел - как логически происходит этот запрос? С соединениями вроде все ясно, а если просто перечислить выбираемые таблицы в разделе ИЗ? Вот текст итогового запроса.

ВЫБРАТЬ
    ВЫБОР
        КОГДА ВТОтветственныеЛица.ФИО = ВТЗамещаемые.ЗамещаемоеЛицо
            ТОГДА ВТЗамещаемые.ЗамещающееЛицо
        ИНАЧЕ ВТОтветственныеЛица.ФИО
    КОНЕЦ КАК ФИО,
    ВТОтветственныеЛица.ОтветственноеЛицо,
    ВТОтветственныеЛица.ГлавнаяВиза,
    ВЫБОР
        КОГДА ВТОтветственныеЛица.ФИО = ВТЗамещаемые.ЗамещаемоеЛицо
            ТОГДА ВТЗамещаемые.ДолжностьЗамещающего
        ИНАЧЕ ВТОтветственныеЛица.Должность
    КОНЕЦ КАК Должность,
    ВЫБОР
        КОГДА ВТОтветственныеЛица.ФИО = ВТЗамещаемые.ЗамещаемоеЛицо
            ТОГДА ВТЗамещаемые.ПодразделениеОрганизации
        ИНАЧЕ ВТОтветственныеЛица.ПодразделениеОрганизации
    КОНЕЦ КАК ПодразделениеОрганизации
ИЗ
    ВТОтветственныеЛица КАК ВТОтветственныеЛица,
    ВТЗамещаемые КАК ВТЗамещаемые
1 HEKPOH
 
20.04.17
09:20
ИЗ
    ВТОтветственныеЛица КАК ВТОтветственныеЛица,
    ВТЗамещаемые КАК ВТЗамещаемые

Некошерно так писать...
2 Рэйв
 
20.04.17
09:21
(0)Полное Соединение сделай
3 Рэйв
 
20.04.17
09:21
(0)Полно Соединение сделай
4 Buster007
 
20.04.17
09:23
Вот это
ВЫБОР
        КОГДА ВТОтветственныеЛица.ФИО = ВТЗамещаемые.ЗамещаемоеЛицо
            ТОГДА ВТЗамещаемые.ЗамещающееЛицо
        ИНАЧЕ ВТОтветственныеЛица.ФИО
    КОНЕЦ КАК ФИО

странное условие. Какой от него смысл?
5 Мимохожий Однако
 
20.04.17
09:24
(0) это весь запрос?
6 dezss
 
20.04.17
09:27
(0) делай левое соединение с той, которая никогда не пустая.
При простом перечислении таблиц в "из" делается полное декартово произведение таблиц. Если одна из них пуста, то и результат будет пустой.
7 poddex
 
20.04.17
09:28
В первой временной таблице ВТОтветственные отбирается список сотрудников. Во второй временной таблице ВТЗамещаемые отбирается список отсутствующих сотрудников (там условие построено так, что всего один человек выпадает - 1 строка в запросе). В итоговом запросе, который я привел, поля первой временной таблицы "сравниваются" (это я так думаю) со второй, и если текст совпадает (ВЫБОР), берутся поля из второй таблицы. Вот только по-ходу, я неверно понял, как логически работает итоговый запрос, оттого и косяки. Кстати, если в ВТЗамещаемые одна строка, то все работает прекрасно.
8 catena
 
20.04.17
09:39
Запись "из тз1,тз2" соединяет каждую строку тз1 с каждой строкой тз2. Если в одной из таблиц строк нет, то и соединять нечего.
9 poddex
 
20.04.17
10:18
Действительно, ПОЛНОЕ СОЕДИНЕНИЕ надо было. Не допетрил, что "Декартово произведение" (6) ,в этом случае результат будет пустой, а соединение берет данные из обеих таблиц.
10 dezss
 
20.04.17
10:23
(9) полное или левое, тут не принципиально, если только одна из них может быть пустой...