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

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