Имя: Пароль:
1C
1С v8
Объединение таблиц в запросе по нескольким реквизитам
,
0 Bigbro
 
27.03.23
06:48
как сделать правильно?
у меня есть справочник, условно товары
и есть регистр
условно товары поставщиков.
в регистре товары поставщиков есть реквизиты типа контрагент, ссылка1, ссылка2 которые как раз и есть мой справочник товары (там может быть пусто или одно заполнено или оба)
как правильно сделать запрос
чтобы выбрать мой товар и контрагента
была бы одна ссылка все замечательно
выбрать
товары.ссылка
регтовары.контрагент
из регистрсведений.товарыпоставщиков как регтовары
внутреннее соединение справочник.товары как товары
по регтовары.ссылка1 = товары.ссылка

а как вторую ссылку пристегнуть?
1 Bigbro
 
27.03.23
06:49
через отдельные запросы и юнион?
2 Мультук
 
гуру
27.03.23
08:13
выбрать
товары.ссылка
регтовары.контрагент
из регистрсведений.товарыпоставщиков как регтовары
внутреннее соединение справочник.товары как товары
по (регтовары.ссылка1 = товары.ссылка) ИЛИ (регтовары.ссылка2 = товары.ссылка)
3 Bigbro
 
27.03.23
08:19
ага, спасибо, уже сам понял что ступил)
4 АгентБезопасной Нацио
 
27.03.23
08:41
постановка задачи странная...
5 Bigbro
 
27.03.23
08:54
там все сильно сложнее, это синтетический кусок на пальцах выдранный чтоб мне понять)
но задача вполне реальная, более того я вам так скажу что практически каждый с этой хренью работает.
общеиспользуемое ПО вот таким образом с данными обращается.
6 Bigbro
 
27.03.23
08:59
лучше расскажите почему я вытащил в подзапрос таблицу, ограничив на берегу количество данных плюс минус на порядок, и потом затолкал во внутреннее соединение а стало работать медленнее наоборот.
меня вроде учили что условия надо накладывать как можно раньше и жестче.
а получается что полные таблицы соединить и наложить условия на результат быстрее..( странно.
7 Bigbro
 
27.03.23
09:06
хотя второй раз быстрее наоборот выполнилось. ладно пофигу разница все равно на уровне 2%. едем дальше)
8 Momus
 
27.03.23
09:13
(7) как минимум разбить соединение по ИЛИ на ОБЪЕДИНИТЬ ВСЕ
9 Гена
 
гуру
27.03.23
09:18
(8) В старые добрые времена меня учили, что некомильфо использовать логическое ИЛИ в условиях соединения, то есть в секции ПО запроса = резкое замедление. Но это было давно, когда деревья были большие )
10 АНДР
 
27.03.23
09:22
(0) Производительность сильно зависит от сервера БД.
(6) Или ограничивает использование индексов. План смотрел? В Или один скан (индекса) РС, с предварительным отбором уже 2.
11 АНДР
 
27.03.23
09:23
(8) Зависит от наличия индексов и параметров выборки по ним.
12 Bigbro
 
27.03.23
09:25
(8) то есть в 1 я правильно предположил.
сейчас попробую
вырастет конечно огород большой но если будет быстрее это важно.
(10) не смотрел пока, сейчас займемся)
14 АгентБезопасной Нацио
 
27.03.23
09:34
(5) уровень секретности поражает... И особенно поражает когда на "общеиспользуемое ПО" ставят новичков [в этом стеке].
15 Bigbro
 
27.03.23
11:08
(14) прорвемся, все когда то были новичками) мозгам полезно загонять их в режим новичка, склероз не страшен)
насчет секретности я устал читать фолианты с перечислениями запретов поэтому уже по умолчанию принимаю что не имею права рассказывать ничего без отдельного разрешения и одобрения.
16 АгентБезопасной Нацио
 
27.03.23
11:49
(15) не, я не о том, что ты пока не всё понимаешь. Понятно, что освоишь. Но ставить новичка в теме на важные вещи (тем более, общеиспользуемые) - нехорошо, неправильно.
Видимо, потому-то у нас все эти ГосИСы и иже работают проктально-генитально.
17 Bigbro
 
27.03.23
12:16
(16) не не я не со стороны вендора, это было бы действительно безответсвенно, я со стороны пользователя общеиспользуемого сервиса, которому понадобили по хотелкам юзеров некоторые доработки к функционалу, для чего пришлось влезть во внутреннюю структуру данных и поковыряться.
18 Bigbro
 
27.03.23
13:01
короче не делайте по ИЛИ соединение - 5 минут
вместо полсекунды для объединения отдельных запросов.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан