|
Странность с запросом - кто пояснит? | ☑ | ||
---|---|---|---|---|
0
tciban
22.08.19
✎
07:13
|
Уважаемые коллеги! столкнулся со странным поведением запроса (или туплю :)). Понадобился простой отчетик, по суди соединение табличных частей документов за период
Вот он: ВЫБРАТЬ ЗаказНаПроизводствоПродукция.Номенклатура, СУММА(ЗаказНаПроизводствоПродукция.Количество) КАК Количество, СУММА(ЦиклПроизводстваГотоваяПродукция.ВесНоменклатуры) КАК ВесНоменклатуры, СУММА(ЦиклПроизводстваГотоваяПродукция.ВесБрутто) КАК ВесБрутто ИЗ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЦиклПроизводства.ГотоваяПродукция КАК ЦиклПроизводстваГотоваяПродукция ПО ЗаказНаПроизводствоПродукция.Номенклатура = ЦиклПроизводстваГотоваяПродукция.Номенклатура ГДЕ ЗаказНаПроизводствоПродукция.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК И ЗаказНаПроизводствоПродукция.Ссылка.Проведен И ЦиклПроизводстваГотоваяПродукция.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК И ЦиклПроизводстваГотоваяПродукция.Ссылка.Проведен СГРУППИРОВАТЬ ПО ЗаказНаПроизводствоПродукция.Номенклатура По идее классическое левое соединение, т.е. в результат запроса должны попасть все строки из Документ.ЗаказНаПроизводство.Продукция и те строки из Документ.ЦиклПроизводства.ГотоваяПродукция у которых совпадает номенклатура. Но в резултате имею только те строки из первого ТЧ документа, к которым нашлись строки во втором ТЧ! Не понимаю почему?! |
|||
1
PuhUfa
22.08.19
✎
07:23
|
(0) И ЦиклПроизводстваГотоваяПродукция.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК
И ЦиклПроизводстваГотоваяПродукция.Ссылка.Проведен Перенеси в соединение |
|||
2
tciban
22.08.19
✎
07:25
|
условие в соединение все фигачить? Ну это даст прибавку на больших объемах может быть, но почему вместо левого раюотает полное соединение?
|
|||
3
ДенисЧ
22.08.19
✎
07:28
|
(2) Потому что у тебя работает не левое и не полное. А внутреннее.
|
|||
4
azt-yur
22.08.19
✎
07:28
|
(2) при условии в Где у тебя записи с Null второй таблицы отсеиваются.
|
|||
5
Троекратное ура
22.08.19
✎
07:29
|
Не полное, а внутреннее. У тебя это условие за пределами соединения исключает все ситуации, когда ЦиклПроизводстваГотоваяПродукция.Ссылка.Проведен = ЛОЖЬ (а по факту это значение вообще NULL).
|
|||
6
PuhUfa
22.08.19
✎
07:30
|
(2)
ВЫБРАТЬ ЗаказНаПроизводствоПродукция.Номенклатура, СУММА(ЗаказНаПроизводствоПродукция.Количество) КАК Количество, СУММА(ЦиклПроизводстваГотоваяПродукция.ВесНоменклатуры) КАК ВесНоменклатуры, СУММА(ЦиклПроизводстваГотоваяПродукция.ВесБрутто) КАК ВесБрутто ИЗ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦиклПроизводстваГотоваяПродукция.Номенклатура КАК Номенклатура, ЦиклПроизводстваГотоваяПродукция.ВесНоменклатуры КАК ВесНоменклатуры, ЦиклПроизводстваГотоваяПродукция.ВесБрутто КАК ВесБрутто ИЗ Документ.ЦиклПроизводства.ГотоваяПродукция КАК ЦиклПроизводстваГотоваяПродукция ГДЕ ЦиклПроизводстваГотоваяПродукция.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК И ЦиклПроизводстваГотоваяПродукция.Ссылка.Проведен) КАК ЦиклПроизводстваГотоваяПродукция ПО ЗаказНаПроизводствоПродукция.Номенклатура = ЦиклПроизводстваГотоваяПродукция.Номенклатура ГДЕ ЗаказНаПроизводствоПродукция.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК И ЗаказНаПроизводствоПродукция.Ссылка.Проведен как то так. в синтаксесе мог где то накосячить |
|||
7
hhhh
22.08.19
✎
07:36
|
(0) да однозначно условие
ЦиклПроизводстваГотоваяПродукция.Ссылка.Проведен оставляет только строчки "в резултате имею только те строки из первого ТЧ документа, к которым нашлись строки во втором ТЧ! Не понимаю почему?!" потому что если строка второго ТЧ не найдена, там условие Проведен не выполняется и она не попадает. |
|||
8
tciban
22.08.19
✎
07:41
|
Ну да, оговорился, не полное, а внутреннее соединение получилось!
Попробую из где перенести в условие соединения. Сработало!!! ВЫБРАТЬ ЗаказНаПроизводствоПродукция.Номенклатура, СУММА(ЗаказНаПроизводствоПродукция.Количество) КАК Количество, СУММА(ЦиклПроизводстваГотоваяПродукция.ВесНоменклатуры) КАК ВесНоменклатуры, СУММА(ЦиклПроизводстваГотоваяПродукция.ВесБрутто) КАК ВесБрутто ИЗ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЦиклПроизводства.ГотоваяПродукция КАК ЦиклПроизводстваГотоваяПродукция ПО ЗаказНаПроизводствоПродукция.Номенклатура = ЦиклПроизводстваГотоваяПродукция.Номенклатура И (ЦиклПроизводстваГотоваяПродукция.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК) И (ЦиклПроизводстваГотоваяПродукция.Ссылка.Проведен) ГДЕ ЗаказНаПроизводствоПродукция.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК И ЗаказНаПроизводствоПродукция.Ссылка.Проведен СГРУППИРОВАТЬ ПО ЗаказНаПроизводствоПродукция.Номенклатура |
|||
9
tciban
22.08.19
✎
07:41
|
Спасибо! Вопрос закрыт, все понял.
Полезно запомнить (я это когда то знал но уже забыл :)) |
|||
10
Йохохо
22.08.19
✎
07:49
|
(9) а что будет в ВесНоменклатуры если производства не было?
|
|||
11
13_Mult
22.08.19
✎
07:58
|
(9) В моём универе один препод говорил: "Хорошо когда не знал, да ещё и забыл". ))
|
|||
12
DrZombi
гуру
22.08.19
✎
08:05
|
(0) Ты же сам так указал в
ПО ЗаказНаПроизводствоПродукция.Номенклатура = ЦиклПроизводстваГотоваяПродукция.Номенклатура |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |