|
Условие по временной таблицы | ☑ | ||
---|---|---|---|---|
0
Diablo_007
11.10.18
✎
12:39
|
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка ПОМЕСТИТЬ ВтНом ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка = &Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В (ВтНом) Есть возможность как-то поставить условие на временную таблицу или необходимо делать так?: ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В (ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка = &Ссылка) Если я хочу в нескольких пакетах использовать то, что у меня в условии, как правильно сделать? |
|||
1
piter3
11.10.18
✎
12:40
|
масло масляное)))
|
|||
2
Diablo_007
11.10.18
✎
12:40
|
(1) Это для примера.
|
|||
3
aleks_default
11.10.18
✎
12:41
|
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В (ВЫБРАТЬ ВТ.Ссылка КАК Ссылка ИЗ ВтНом КАК Вт) |
|||
4
1Сергей
11.10.18
✎
12:45
|
(2) с соединениями плохо знаком?
|
|||
5
xXeNoNx
11.10.18
✎
12:47
|
(3) фи...
|
|||
6
xXeNoNx
11.10.18
✎
12:47
|
(4) я тож за внутреннее соединение
|
|||
7
piter3
11.10.18
✎
12:47
|
(2) плохой пример
|
|||
8
Diablo_007
11.10.18
✎
12:47
|
(3) Оо, Логично, спасибо большое)
|
|||
9
xXeNoNx
11.10.18
✎
12:49
|
(8) не делай так!!!
|
|||
10
Diablo_007
11.10.18
✎
12:53
|
(9) Почему?))
|
|||
11
xXeNoNx
11.10.18
✎
12:55
|
(10) выборка в секции ГДЕ - это УГ
|
|||
12
Diablo_007
11.10.18
✎
12:57
|
А как еще ограничить? Ну не хочется делать 1ый запрос, выгружать данные, а потом делать 2ой запрос, чтобы вставить туда данные из 1ого запроса. не думаю, что этот вариант будет лучше
|
|||
13
azernot
11.10.18
✎
13:04
|
(11) А что лучше
ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В (ВЫБРАТЬ ВТ.Ссылка КАК Ссылка ИЗ ВтНом КАК Вт) ИЛИ ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтНом КАК Вт ПО ВтНом.Ссылка = Номенклатура.Ссылка ? |
|||
14
Diablo_007
11.10.18
✎
13:11
|
(13) А Это риторический вопрос? А то я не знаю) Но мне кажется, что во втором случае, он сначала выберет всю номенклатуру, а только после этого всю эту номенклатуру, которая есть в базе, а потом будет ее соединять, а в первом случае, на момент выборки он сразу будет проверять на условие вхождения. Плюс у меня оборотные регистры, и я накладываю отбор в регистре, а если я буду делать к этому регистру внутренее соединение, мне кажется, работать будет дольше.. Исправьте, если ошибаюсь. Если есть ГУРУ Скуля, с радостью выслушаю подробности работы. в том числе Как накладываются условия в виртуальных таблицах
|
|||
15
xXeNoNx
11.10.18
✎
13:11
|
(13) нуда
|
|||
16
VladZ
11.10.18
✎
13:20
|
(0) Что-то не я понял, к чему эти нелепые телодвижения...
|
|||
17
Vakhrin
11.10.18
✎
13:21
|
Если оборотные регистры, то почему условие в виртуальной таблице не хочешь?
.Обороты(,, Реквизит В (Выбрать Элемент ИЗ ВТ)) |
|||
18
azernot
11.10.18
✎
13:21
|
(14) (15) Это вопрос. Реальный. Что лучше?
Условие ГДЕ В (ЗапросКВТ) или внутреннее соединение с этим ЗапросКВТ? Я как-то думал, что Условие ГДЕ В (ЗапросКВТ) оптимальнее внутреннего соединения. |
|||
19
1Сергей
11.10.18
✎
13:22
|
(18) в общем случае нет
|
|||
20
Diablo_007
11.10.18
✎
13:25
|
(17) Так и сделал. Код с номенклатурой для примера был. Вот конечный запрос:
ВЫБРАТЬ _ДействующиеАкцииОстатки.Акция, _ДействующиеАкцииОстатки.ОбщееКоличествоОстаток, _ДействующиеАкцииОстатки.КоличествоНаКлиентаОстаток, _ДействующиеАкцииОстатки.ДатаНачала, _ДействующиеАкцииОстатки.ДатаОкончания ПОМЕСТИТЬ ВтДостАкции ИЗ РегистрНакопления._ДействующиеАкции.Остатки( , ДатаНачала <= &ДатаДокумента И ДатаОкончания >= &ДатаДокумента) КАК _ДействующиеАкцииОстатки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ _ДвиженияПоАкциямОбороты.Акция, _ДвиженияПоАкциямОбороты.КоличествоОборот ПОМЕСТИТЬ ВтИспАкции ИЗ РегистрНакопления._ДвиженияПоАкциям.Обороты( , , Авто, Контрагент = &Контрагент И ПунктРазгрузки = &ПунктРазгрузки И Акция В (ВЫБРАТЬ ВтДостАкции.Акция КАК Акция ИЗ ВтДостАкции КАК ВтДостАкции)) КАК _ДвиженияПоАкциямОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ _ДвиженияПоАкциямОбороты.Акция, _ДвиженияПоАкциямОбороты.КоличествоОборот ПОМЕСТИТЬ ВтИспАкцииВсего ИЗ РегистрНакопления._ДвиженияПоАкциям.Обороты( , , , Акция В (ВЫБРАТЬ ВтДостАкции.Акция КАК Акция ИЗ ВтДостАкции КАК ВтДостАкции)) КАК _ДвиженияПоАкциямОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВтДостАкции.Акция, ВтДостАкции.ОбщееКоличествоОстаток КАК ОбщееОграничение, ВтДостАкции.КоличествоНаКлиентаОстаток КАК КлиентОграничение, ВтДостАкции.ОбщееКоличествоОстаток - ЕСТЬNULL(ВтИспАкцииВсего.КоличествоОборот, 0) КАК ОбщееКоличествоОстаток, ВтДостАкции.КоличествоНаКлиентаОстаток - ЕСТЬNULL(ВтИспАкции.КоличествоОборот, 0) КАК ОстатокПоКлиенту ПОМЕСТИТЬ ВтИтог ИЗ ВтДостАкции КАК ВтДостАкции ЛЕВОЕ СОЕДИНЕНИЕ ВтИспАкции КАК ВтИспАкции ПО (ВтИспАкции.Акция = ВтДостАкции.Акция) ЛЕВОЕ СОЕДИНЕНИЕ ВтИспАкцииВсего КАК ВтИспАкцииВсего ПО (ВтИспАкцииВсего.Акция = ВтДостАкции.Акция) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВтИтог.Акция, ВтИтог.ОбщееОграничение, ВтИтог.КлиентОграничение, ВтИтог.ОбщееКоличествоОстаток, ВтИтог.ОстатокПоКлиенту ИЗ ВтИтог КАК ВтИтог ГДЕ (ВтИтог.ОбщееКоличествоОстаток > 0 ИЛИ ВтИтог.ОбщееОграничение = 0) И (ВтИтог.ОстатокПоКлиенту > 0 ИЛИ ВтИтог.КлиентОграничение = 0) |
|||
21
azernot
11.10.18
✎
13:25
|
(19) Хотелось бы чего-то более аргументированного обоснования. Почему в общем случае нет? А в каком случае "да"?
|
|||
22
Cool_Profi
11.10.18
✎
13:26
|
(21) Поймай запросы в скуле и посмотри планы.
После определённого размера списка в условии В() у тебя будет фуллскан, если не хуже. |
|||
23
Diablo_007
11.10.18
✎
13:27
|
(22) Ну у меня в условии В будет не больше 10 позиций, я думаю, ну от силы 50. Не проблема. Но если в общем случае внутреннее соединение лучше, чем Где, то что тогда с регистрами? Условие в виртуальной таблице будет быстрее, чем внутреннее соединение?
|
|||
24
Cool_Profi
11.10.18
✎
13:28
|
(23) "словие в виртуальной таблице будет быстрее, чем внутреннее соединение?"
Да. Опять же - лови запрос и сам поймёшь ответ. |
|||
25
1Сергей
11.10.18
✎
13:29
|
(23) Конечно, быстрее
|
|||
26
Diablo_007
11.10.18
✎
13:30
|
(25) Ну вот и я помню, что быстрее, отсюда и тема пошла, просто по глупости своей не сообразил, как поставить условие на временную таблицу))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |