Как сделать левое соединение ДЕЙСТВИТЕЛЬНО Левым ?
Приветствую.
Что я ожидаю, выполняя левое соединение - берутся ВСЕ поля из левой таблицы и дополняются данными из правой таблицы, которые удовлетворяют условиям соединения.
Тогда почему итоговая таблица дополняется всеми данными из ПРАВОЙ таблицы удовлетворяющими условиям соединения ?
Что я ожидаю, выполняя левое соединение - берутся ВСЕ поля из левой таблицы и дополняются данными из правой таблицы, которые удовлетворяют условиям соединения.
Тогда почему итоговая таблица дополняется всеми данными из ПРАВОЙ таблицы удовлетворяющими условиям соединения ?
ВЫБРАТЬ
НачислениеЗарплатыОсновныеНачисления.НомерСтроки,
НачислениеЗарплатыОсновныеНачисления.Сотрудник КАК Сотрудник,
НачислениеЗарплатыОсновныеНачисления.ВидРасчета,
НачислениеЗарплатыОсновныеНачисления.ДатаНачала,
КОНЕЦПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, ДЕНЬ) КАК ДатаОкончания,
НачислениеЗарплатыОсновныеНачисления.ГрафикРаботы
ПОМЕСТИТЬ ВТ_ДатнныеДокумента
ИЗ
Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления
ГДЕ
НачислениеЗарплатыОсновныеНачисления.Ссылка = &Ссылка
И НачислениеЗарплатыОсновныеНачисления.ВидРасчета = ЗНАЧЕНИЕ(ПланвидовРасчета.ОсновныеНачисления.Оклад)
ИНДЕКСИРОВАТЬ ПО
Сотрудник
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
МАКСИМУМ(СведенияОСотрудниках.Период) КАК Период,
СведенияОСотрудниках.Сотрудник,
ВТ_ДатнныеДокумента.НомерСтроки
ПОМЕСТИТЬ ВТ_Оклады
ИЗ
ВТ_ДатнныеДокумента КАК ВТ_ДатнныеДокумента
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках КАК СведенияОСотрудниках
ПО ВТ_ДатнныеДокумента.Сотрудник = СведенияОСотрудниках.Сотрудник
И ВТ_ДатнныеДокумента.ДатаНачала >= СведенияОСотрудниках.Период
ГДЕ
НЕ СведенияОСотрудниках.Сотрудник ЕСТЬ NULL
СГРУППИРОВАТЬ ПО
СведенияОСотрудниках.Сотрудник,
ВТ_ДатнныеДокумента.НомерСтроки
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
СведенияОСотрудниках.Сотрудник КАК Сотрудник,
СведенияОСотрудниках.Оклад КАК Размер,
ВТ_Оклады.НомерСтроки
ПОМЕСТИТЬ ВТ_РасчитанныйОклад
ИЗ
ВТ_Оклады КАК ВТ_Оклады
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках КАК СведенияОСотрудниках
ПО ВТ_Оклады.Период = СведенияОСотрудниках.Период
И ВТ_Оклады.Сотрудник = СведенияОСотрудниках.Сотрудник
ИНДЕКСИРОВАТЬ ПО
Сотрудник
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_ДатнныеДокумента.НомерСтроки,
ВТ_ДатнныеДокумента.Сотрудник,
ВТ_ДатнныеДокумента.ВидРасчета,
ВТ_ДатнныеДокумента.ДатаНачала,
ВТ_ДатнныеДокумента.ДатаОкончания,
ВТ_ДатнныеДокумента.ГрафикРаботы,
ЕСТЬNULL(ВТ_РасчитанныйОклад.Размер, 0) КАК Размер
ИЗ
ВТ_ДатнныеДокумента КАК ВТ_ДатнныеДокумента
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РасчитанныйОклад КАК ВТ_РасчитанныйОклад
ПО ВТ_ДатнныеДокумента.НомерСтроки = ВТ_РасчитанныйОклад.НомерСтроки
ПоказатьПо теме из базы знаний
- Как нам защитить журнал
- Как спроектировать структуру регистра сведений
- Пример пошагового решения проблемы производительности на базе Postgres SQL с картинками
- Перечень множественных значений в ячейке динамического списка. Как стало и как было
- Внесение изменений в выгрузку торгового каталога из 1С: УПП (обычные формы, платформа 8.3) на сайт с помощью стандартной обработки 1С Битрикс
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
ровно так и должно быть.
(1)
значит что-то не так сделал.
Показывай свой запрос, или код...чтобы предметно поговорить
Что я ожидаю, выполняя левое соединение - берутся ВСЕ поля из левой таблицы и дополняются данными из правой таблицы, которые удовлетворяют условиям соединения.
ровно так и должно быть.
(1)
Тогда почему итоговая таблица дополняется всеми данными из ПРАВОЙ таблицы удовлетворяющими условиям соединения ?
значит что-то не так сделал.
Показывай свой запрос, или код...чтобы предметно поговорить
Насколько я помню, если Вы все условия прописывает в связи то будет работать как левое соединение, если вы условия пишите в разделе "ГДЕ" то тогда у вас будет аналог внутреннего соединения. Посмотрите и сделайте условия в связях
Вот пример. Есть справочник контрагенты и документ Заказ поставщику. Например по справочнику контрагенты хочу подтянуть из правой таблицы контрагентов сумму всех заказов за какой то период. Так вот чтобы левое соединение было левым я прям в условиях связи напишу критерий отбора
ВЫБРАТЬ
Контрагенты.Ссылка,
СУММА(ЗаказПоставщику.СуммаДокумента) КАК СуммаДокумента
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
ПО Контрагенты.Ссылка = ЗаказПоставщику.Контрагент
И (ЗаказПоставщику.Дата МЕЖДУ &НачалоПериода И &КонецПериода)
СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка
Если же я это условия напишу/ размещу через ГДЕ ЗаказПоставщику.Дата МЕЖДУ &НачалоПериода И &КонецПериода то тогда у меня будет не весь список контрагентов а тот у которых есть заказы поставщику
ВЫБРАТЬ
Контрагенты.Ссылка,
СУММА(ЗаказПоставщику.СуммаДокумента) КАК СуммаДокумента
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
ПО Контрагенты.Ссылка = ЗаказПоставщику.Контрагент
И (ЗаказПоставщику.Дата МЕЖДУ &НачалоПериода И &КонецПериода)
СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка
Если же я это условия напишу/ размещу через ГДЕ ЗаказПоставщику.Дата МЕЖДУ &НачалоПериода И &КонецПериода то тогда у меня будет не весь список контрагентов а тот у которых есть заказы поставщику
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот