|
Пустой результат запроса, если одна из временных таблиц пустая | ☑ | ||
---|---|---|---|---|
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) полное или левое, тут не принципиально, если только одна из них может быть пустой...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |