Имя: Пароль:
1C
1С v8
Оптимален ли запрос?
0 zak555
 
17.04.13
13:38
есть Справочник3 с реквизитами шапки Реквизит1, Реквизит2, Реквизит3
есть так же табличная часть ТабличнаяЧасть1 с реквизитами Реквизит1 (ссылка на справочник2), Реквизит2 (строка)

нужно вывести все реквизиты шапки справочника3 и колонку с реквизитом Реквизит2 из ТЧ, если Реквизит1 из ТЧ равен некому параметру парам, а если не равен -- пустую строку

вот собственно запрос :



ВЫБРАТЬ
   Справочник3.Ссылка,
   Справочник3.Код,
   Справочник3.Наименование,
   Справочник3.Реквизит1,
   Справочник3.Реквизит2,
   Справочник3.Реквизит3,
   ЕСТЬNULL(Справочник3ТабличнаяЧасть1.Реквизит2, "") КАК РеквизитКоторыйНужноПолучить
ИЗ
   Справочник.Справочник3 КАК Справочник3
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Справочник3.ТабличнаяЧасть1 КАК Справочник3ТабличнаяЧасть1
       ПО Справочник3ТабличнаяЧасть1.Ссылка = Справочник3.Ссылка И
           Справочник3ТабличнаяЧасть1.Реквизит1 = &парам



оптимален ли он?
1 Лефмихалыч
 
17.04.13
13:39
начать с того, что запрос вернет туеву хучу дублей
2 zak555
 
17.04.13
13:40
(1) почему дублей ?
и при каких условий ?
3 zak555
 
17.04.13
13:45
забыл главное: у одного элемента Справочник3 в ТЧ не может быть двух одинаковых значений в Реквизит1
4 DS
 
17.04.13
13:52
А почему бы сразу не обратиться к таблице ТЧ?
5 zak555
 
17.04.13
13:53
(4) выборка шапки написана на много строк
т.е. не хочется менять что уже написано, а хочется дописать вывод "колонки"
6 acsent
 
17.04.13
13:54
а разве как то можно по другому?
7 zak555
 
17.04.13
13:56
(6) вдруг через временные таблицу/индексируемые поля и т.д.
8 Рэйв
 
17.04.13
13:58
(0)У тебя же в Таб части есть поле Ссылка.

Выбирай прямо из ТС и через ссылку доставай реквизиты шапки. и никаких соединений не надо, только условие
9 Рэйв
 
17.04.13
13:59
ТС = Таб Часть
10 zak555
 
17.04.13
13:59
(8) см. в (5)
11 Escander
 
17.04.13
14:00
(8) что будет неявным обращением к дургой таблице со всеми вытекающими
12 Рэйв
 
17.04.13
14:03
(11)Ну да.
13 Лефмихалыч
 
17.04.13
14:52
(11)  да и хер бы с ней. Другое дело, что результат будет не таким, какой автору нужен - ему левое соежинение нужно, а если только к ТЧ обращаться, то будет внутреннее
14 zak555
 
17.04.13
14:54
Лефмихалыч ты что имел ввиду в (1)
15 Лефмихалыч
 
17.04.13
14:55
Я бы еще попробовал во временную таблицу выгрести из ТЧ все такие пары Ссылка, Реквизит2, для которых условие выполняется, а соединял со справочником уже эту ВТ.

(14) в свете (3)  не актуально
16 Лефмихалыч
 
17.04.13
15:01
(15) только в этом случае не пустую строку в ЕСТЬNULL() совать надо, а пустую ссылку того же типа, что и реквизит2, тогда в ВТ будет только одна колонка, а не три под Реквизит2
17 Escander
 
17.04.13
16:21
(15) от ВТ толку при соединении 2 таблиц практичски бестолку... тем более что там условие связи попало в индекс
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.