Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Левое соединение в запросе

Левое соединение в запросе
Я
   6elka1703
 
02.04.20 - 19:24
Добрый вечер, есть вопрос про левое соединение. Правильно ли я понимаю что левое соединение берет все записи из левой таблицы и записи из правой которые соответствуют условиям, и если записей в правой таблице нет то прилет null?
Если так, то я не совсем понимаю, в запросе делаю левое соединение, в левой таблице 2 записи, в правой таблице по условию подходит только одна, в результате должно быть 1 запись из левой + null и 2 запись из левой + значение из правой. Но по факту остается одна запись для которой было значение из правой таблицы. Как так?
   rsv
 
1 - 02.04.20 - 19:36
не бывает чудес при левом все записи приедут из левой или больше если в правой значений соодинения больше одного
   PR
 
2 - 02.04.20 - 19:37
Главное, ни в коем случае не пиши сюда текст запроса!
   rsv
 
3 - 02.04.20 - 19:39
возможно путаете лефт с иннер или забыли что еще в запросе гдето есть were
   Sserj
 
4 - 02.04.20 - 19:41
(0) Нельзя при левом соединении накладывать условия на правую таблицу. Точнее накладывать то можно но соединение тогда автоматически станет внутренним.
   ДенисЧ
 
5 - 02.04.20 - 19:50
Никогда не показывай свой текст запроса! Это дурная примета, 7 лет секс будет...
   6elka1703
 
6 - 02.04.20 - 19:56
Да забыл я код скинуть)
   6elka1703
 
7 - 02.04.20 - 19:56
ВЫБРАТЬ
    ЗапасыНоменклатураПродукцияОстатки.Заказ КАК Заказ,
    МАКСИМУМ(ЗапасыНоменклатураПродукцияОстатки.Заказ.Контрагент) КАК Контрагент,
    ЗапасыНоменклатураПродукцияОстатки.НоменклатураПродукция КАК Номенклатура,
    ЗапасыНоменклатураПродукцияОстатки.Цвет КАК Цвет,
    МАКСИМУМ(ЗапасыНоменклатураПродукцияОстатки.КЗаказуОстаток) КАК КЗаказу,
    МАКСИМУМ(ЗапасыНоменклатураПродукцияОстатки.ЗаказаноОстаток) КАК Заказано,
    СУММА(ЕСТЬNULL(ЗапасыНоменклатураПродукцияОборотыВыпускНоменклатуры.РезервОборот, 0)) КАК КоличествоВыпущеннойНоменклатуры
{ВЫБРАТЬ
    Заказ.*,
    Контрагент.*,
    Номенклатура.*,
    Цвет.*,
    КЗаказу,
    Заказано,
    КоличествоВыпущеннойНоменклатуры}
ИЗ
    РегистрНакопления.ЗапасыНоменклатураПродукция.Остатки(
            &КонецПериода,
            Заказ <> ЗНАЧЕНИЕ(Документ.Заказ.ПустаяСсылка)
                И НоменклатураПродукция ССЫЛКА Справочник.Номенклатура) КАК ЗапасыНоменклатураПродукцияОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНоменклатураПродукция.Обороты(
                &НачалоПериода,
                &КонецПериода,
                Регистратор,
                Заказ <> ЗНАЧЕНИЕ(Документ.Заказ.ПустаяСсылка)
                    И НоменклатураПродукция ССЫЛКА Справочник.Номенклатура) КАК ЗапасыНоменклатураПродукцияОборотыВыпускНоменклатуры
        ПО ЗапасыНоменклатураПродукцияОстатки.Заказ = ЗапасыНоменклатураПродукцияОборотыВыпускНоменклатуры.Заказ
            И ЗапасыНоменклатураПродукцияОстатки.НоменклатураПродукция = ЗапасыНоменклатураПродукцияОборотыВыпускНоменклатуры.НоменклатураПродукция
            И ЗапасыНоменклатураПродукцияОстатки.Цвет = ЗапасыНоменклатураПродукцияОборотыВыпускНоменклатуры.Цвет
ГДЕ
    ЗапасыНоменклатураПродукцияОборотыВыпускНоменклатуры.Регистратор ССЫЛКА Документ.ВыпускНоменклатуры
{ГДЕ
    ЗапасыНоменклатураПродукцияОстатки.Заказ.*,
    ЗапасыНоменклатураПродукцияОстатки.Заказ.Контрагент.* КАК Контрагент,
    ЗапасыНоменклатураПродукцияОстатки.НоменклатураПродукция.* КАК Номенклатура,
    ЗапасыНоменклатураПродукцияОстатки.Цвет.*}

СГРУППИРОВАТЬ ПО
    ЗапасыНоменклатураПродукцияОстатки.Заказ,
    ЗапасыНоменклатураПродукцияОстатки.НоменклатураПродукция,
    ЗапасыНоменклатураПродукцияОстатки.Цвет
   Cyberhawk
 
8 - 02.04.20 - 19:59
(7) У тебя в ГДЕ условие на правую таблицу. Забудь про левое соединение.
   6elka1703
 
9 - 02.04.20 - 19:59
(4) вот дурак, чет забыл про это
   6elka1703
 
10 - 02.04.20 - 19:59
спасибо, чего то я ступил жестко
   Sserj
 
11 - 02.04.20 - 20:34
(8)(9) Вообще то можно и не забывать про левое соединение :)
Оно не становится на самом деле внутренним, просто при проверке условия попадет NULL который всегда на выходе дает false. Но если очень нужно то можно схитрить:
ГДЕ
  ЕСТЬNULL(ЗапасыНоменклатураПродукцияОборотыВыпускНоменклатуры.Регистратор, Документ.ВыпускНоменклатуры) = Документ.ВыпускНоменклатуры
   Ненавижу 1С
 
12 - 02.04.20 - 21:00
(11) мне кажется это не скомпилируется в запрос
   Ненавижу 1С
 
13 - 02.04.20 - 21:24
ГДЕ
    ЕСТЬNULL(ЗапасыНоменклатураПродукцияОборотыВыпускНоменклатуры.Регистратор ССЫЛКА Документ.ВыпускНоменклатуры, ИСТИНА)

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