Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Левое соединение по ПОДОБНО

Левое соединение по ПОДОБНО
Я
   Sh18
 
24.09.21 - 09:38
Код товара состоит из основного кода и нескольких суффиксов. Задача: По списку основных кодов надо получить соответствующие товары:

ВЫБРАТЬ
    Тбл.КодТовара КАК ОсновнойКод,
    Тбл.ДлинаКода КАК ДлинаКода
ПОМЕСТИТЬ ВсеКоды
ИЗ
    &Тбл КАК Тбл
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    Номенклатура.Ссылка КАК Номенклатура,
    ВсеКоды.ОсновнойКод КАК ОсновнойКод
ПОМЕСТИТЬ Ассортимент
ИЗ
    ВсеКоды КАК ВсеКоды
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
        ПО (Номенклатура.Код ПОДОБНО ВсеКоды.ОсновнойКод)
ГДЕ
    НЕ Номенклатура.Ссылка ЕСТЬ NULL

Проблема - очень медленно выполняется запрос, основных кодов может быть тысячи, а то и десятки тысяч
(ДлинаКода - пробовал через подстроку, что-то оно совсем не хочет сравнивать)
   Sh18
 
1 - 24.09.21 - 09:39
(0) Да. % я вписал в конец основного кода. Можно не вписывать
   mikecool
 
2 - 24.09.21 - 09:40
вынести основной код в реквизит и искать по нему
   mikecool
 
3 - 24.09.21 - 09:40
+2 искать на равенство
   ДенисЧ
 
4 - 24.09.21 - 09:40
" очень медленно выполняется запрос"
Это нормально для таких условий.
   Sh18
 
5 - 24.09.21 - 10:00
Спасибо! Да, похоже, ничего другого не остается. Но была надежда, мало ли. Там фиговость, часть основных кодов приходят с первым суффиксом и интересуют только они. Но это немного, это можно и медленно обсчитать
Спасибо!
   Шурик71
 
6 - 24.09.21 - 10:09
Насчет суффиксов..

Можешь попробовать что-то типа 
ПО ((Номенклатура.Код >= ВсеКоды.ОсновнойКод)
И (Номенклатура.Код < (ВсеКоды.ОсновнойКод + "яяяяяя")))
   patapum
 
7 - 24.09.21 - 10:18
(6) Подстрока(Номенклатура.Код, 1, &ДлинаОсновногоКода) = ВсеКоды.ОсновнойКод - не проще?
   Шурик71
 
8 - 24.09.21 - 10:20
(7) Это только если длина основного кода фиксирована
   acht
 
9 - 24.09.21 - 10:23
(1) % я вписал в конец основного кода
Добавь индекс по ОсновнойКод во времянке. Для условия "ааа подобно ббб%" индексы вполне работают. И у тебя там внутреннее соединение, не левое.
   Sh18
 
10 - 24.09.21 - 10:46
(6) !!! 5 сек вместо 3 мин
(7) Длину основного кода надо явно ограничить в первом запросе, но она не фиксирована

В общем, работает больше-меньше!
   Sh18
 
11 - 24.09.21 - 11:13
(9) Фактически, внутреннее. Но ВНУТРЕННЕЕ делает два прохода, и да, желательно индексы по обоим таблицам. Левое + не null работает за один проход и нужны индексы только для правой таблицы
   acht
 
12 - 24.09.21 - 11:19
(11) > Левое + не null работает за один проход
У тебя условие накладывается не на соединение, а на результат соединения. Какой наъ "один проход"?

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.