Имя: Пароль:
1C
1С v8
Проблема с левым соединением
0 extrim-style
 
15.07.11
14:17
Хелп! Имеются 2 результата запроса в виде таблиц. В Таб1 12 строк, имеются значения Неопределено. В Таб2 10 строк. Мне необходимо добавить в Таб1 колонку из Таб2, связав эти таблицы по 3-м полям. Соединяю левым соединением. В результате получаю 10 строк, а не 12. Строки со значением Неопределено не попадают в результирующую таблицу. Почему?
1 Jstunner
 
15.07.11
14:17
запрос покажи
2 acsent
 
15.07.11
14:18
НЕ верю
3 extrim-style
 
15.07.11
14:19
Запрос.Текст = "ВЫБРАТЬ
                  |    яЕК_ДвижениеЗатратОборотыОбороты.ЦентрУчетаИсточник КАК ЦентрЗатрат,
                  |    яЕК_ДвижениеЗатратОборотыОбороты.ЭлементУчета КАК СтатьяЗатрат,
                  |    яЕК_ДвижениеЗатратОборотыОбороты.СуммаЗатратОборот * 1000 КАК Сумма,
                  |    яЕК_ДолиДополнительногоРаспределенияЗатрат.Коэффициент КАК Количество
                  |ИЗ
                  |    РегистрНакопления.яЕК_ДвижениеЗатратОбороты.Обороты(
                  |            &НачалоПериода,
                  |            &КонецПериода,
                  |            ,
                  |            ЦентрУчета = &ЦентрЗатрат
                  |                И ВидУчетаЗатрат = &ВидУчетаЗатрат
                  |                И ЦентрУчета.ТипЦЗ.Код <> ""000000014""
                  |                И ЦентрУчета.ТипЦЗ.Код <> ""000000015""
                  |                И ЦентрУчета.ТипЦЗ.Код <> ""000000016"") КАК яЕК_ДвижениеЗатратОборотыОбороты
                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.яЕК_ДолиДополнительногоРаспределенияЗатрат КАК яЕК_ДолиДополнительногоРаспределенияЗатрат
                  |        ПО яЕК_ДвижениеЗатратОборотыОбороты.ВидУчетаЗатрат = яЕК_ДолиДополнительногоРаспределенияЗатрат.ВидУчетаЗатрат
                  |            И яЕК_ДвижениеЗатратОборотыОбороты.ЦентрУчета = яЕК_ДолиДополнительногоРаспределенияЗатрат.ЦентрЗатрат
                  |            И яЕК_ДвижениеЗатратОборотыОбороты.ЦентрУчетаИсточник = яЕК_ДолиДополнительногоРаспределенияЗатрат.ЦентрЗатратИсточник
                  |ГДЕ
                  |    яЕК_ДолиДополнительногоРаспределенияЗатрат.Период МЕЖДУ &НачалоПериода И &КонецПериода
                  |    И яЕК_ДолиДополнительногоРаспределенияЗатрат.ВидУчетаЗатрат = &ВидУчетаЗатрат
                  |    И яЕК_ДолиДополнительногоРаспределенияЗатрат.ЦентрЗатрат = &ЦентрЗатрат";
                  ТЗ = Запрос.Выполнить().Выгрузить();
4 Jstunner
 
15.07.11
14:24
причина в ГДЕ
5 extrim-style
 
15.07.11
14:25
по отдельности работают нормально, а связываются не правильно. Остаётся 10 записей.
6 Reset
 
15.07.11
14:27
яЕк xD
Ответ в (4), очевидно, правильный.
7 extrim-style
 
15.07.11
14:29
а как исправить? что-то я не понял в чем причина, ведь в ГДЕ только условие на вторую таблицу накладывается. И отдельно выбирается нормально 10 записей.
8 Reset
 
15.07.11
14:30
не на вторую, а на соединенные две
9 viktor_vv
 
15.07.11
14:31
(7) Добавь эти условия в ПО и убери из ГДЕ.
10 extrim-style
 
15.07.11
14:38
Спасибо!
А может кто-нибудь объяснит, почему так нужно делать?
11 Jstunner
 
15.07.11
14:43
с условием в ГДЕ на соединяемую таблицу левое соединение вырождается во внутреннее
12 73
 
15.07.11
14:45
Потому как эти условия на NULL-ы накладываются, а любое сравнение с NULL-ом - Ложь.
13 extrim-style
 
15.07.11
17:17
(12) а почему они накладываются на NULL-ы, когда в ГДЕ условия только для второй таблицы?
14 73
 
15.07.11
17:28
(13) См.(8) - они накладываются на результат.
15 Prapor
 
15.07.11
17:38
от жесть то какая, скоро оператор присваивания будет вызывать вопросы.
16 extrim-style
 
15.07.11
18:01
(14) понял. спс