|
Левое соединение по ПОДОБНО | ☑ | ||
---|---|---|---|---|
0
Sh18
24.09.21
✎
09:38
|
Код товара состоит из основного кода и нескольких суффиксов. Задача: По списку основных кодов надо получить соответствующие товары:
ВЫБРАТЬ Тбл.КодТовара КАК ОсновнойКод, Тбл.ДлинаКода КАК ДлинаКода ПОМЕСТИТЬ ВсеКоды ИЗ &Тбл КАК Тбл ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура.Ссылка КАК Номенклатура, ВсеКоды.ОсновнойКод КАК ОсновнойКод ПОМЕСТИТЬ Ассортимент ИЗ ВсеКоды КАК ВсеКоды ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура ПО (Номенклатура.Код ПОДОБНО ВсеКоды.ОсновнойКод) ГДЕ НЕ Номенклатура.Ссылка ЕСТЬ NULL Проблема - очень медленно выполняется запрос, основных кодов может быть тысячи, а то и десятки тысяч (ДлинаКода - пробовал через подстроку, что-то оно совсем не хочет сравнивать) |
|||
1
Sh18
24.09.21
✎
09:39
|
(0) Да. % я вписал в конец основного кода. Можно не вписывать
|
|||
2
mikecool
24.09.21
✎
09:40
|
вынести основной код в реквизит и искать по нему
|
|||
3
mikecool
24.09.21
✎
09:40
|
+2 искать на равенство
|
|||
4
ДенисЧ
24.09.21
✎
09:40
|
" очень медленно выполняется запрос"
Это нормально для таких условий. |
|||
5
Sh18
24.09.21
✎
10:00
|
Спасибо! Да, похоже, ничего другого не остается. Но была надежда, мало ли. Там фиговость, часть основных кодов приходят с первым суффиксом и интересуют только они. Но это немного, это можно и медленно обсчитать
Спасибо! |
|||
6
Шурик71
24.09.21
✎
10:09
|
Насчет суффиксов..
Можешь попробовать что-то типа ПО ((Номенклатура.Код >= ВсеКоды.ОсновнойКод) И (Номенклатура.Код < (ВсеКоды.ОсновнойКод + "яяяяяя"))) |
|||
7
patapum
24.09.21
✎
10:18
|
(6) Подстрока(Номенклатура.Код, 1, &ДлинаОсновногоКода) = ВсеКоды.ОсновнойКод - не проще?
|
|||
8
Шурик71
24.09.21
✎
10:20
|
(7) Это только если длина основного кода фиксирована
|
|||
9
acht
24.09.21
✎
10:23
|
(1) % я вписал в конец основного кода
Добавь индекс по ОсновнойКод во времянке. Для условия "ааа подобно ббб%" индексы вполне работают. И у тебя там внутреннее соединение, не левое. |
|||
10
Sh18
24.09.21
✎
10:46
|
(6) !!! 5 сек вместо 3 мин
(7) Длину основного кода надо явно ограничить в первом запросе, но она не фиксирована В общем, работает больше-меньше! |
|||
11
Sh18
24.09.21
✎
11:13
|
(9) Фактически, внутреннее. Но ВНУТРЕННЕЕ делает два прохода, и да, желательно индексы по обоим таблицам. Левое + не null работает за один проход и нужны индексы только для правой таблицы
|
|||
12
acht
24.09.21
✎
11:19
|
(11) > Левое + не null работает за один проход
У тебя условие накладывается не на соединение, а на результат соединения. Какой наъ "один проход"? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |