|
Соединение в запросе и условие | ☑ | ||
---|---|---|---|---|
0
salvator
15.12.20
✎
16:49
|
Доброго дня!
Скажите, можно ли в запросе как-то указать с какой таблицей делать левое соединение, в зависимости от условий? Пример такой: К справочнику левым соединением присоединяется виртуальная таблица регистра сведений. Затем еще одним левым соединением другая виртуальная таблица другого регистра сведений (РС-1) Стоит задача переписать запрос: в зависимости от условия выбирать либо данные из РС-1, либо РС-2 (так же левым соединением, РС-2 пока в запросе не фигурирует). Как лучше сделать: добавить еще одно левое соединение (к РС-2) и получать из него данные по условию (через выбор-когда или в постобработке), либо сделать два разных текста запроса в зависимости от условия и не делать дополнительное соединение? Условие на соединение же никак не прописать, насколько я знаю? |
|||
1
asady
15.12.20
✎
17:01
|
(0) текст запроса формируй программно.
|
|||
2
salvator
15.12.20
✎
17:02
|
(1) Вариант, конечно, но хотелось бы иметь текст запроса, способный открываться в дальнейшем в конструкторе.
|
|||
3
lEvGl
гуру
15.12.20
✎
17:03
|
выбор когда это же и есть условие
|
|||
4
mkalimulin
15.12.20
✎
17:05
|
(0) Что значит: не прописать условие на соединение? То, что стоит после ПО и есть нужное тебе условие
|
|||
5
Dmitrii
гуру
15.12.20
✎
17:06
|
(0) Можно как-нибудь так.
А вообще вариантов может быть несколько, включая программное формирование текста запроса. |
|||
6
acht
15.12.20
✎
17:07
|
(0) > словие на соединение же никак не прописать
выбрать выбор когда &флаг1 тогда таблица1.поле иначе таблица2.поле конец из таблица0 левое соединение таблица1 по &флаг1 и (...) левое соединение таблица2 по не &флаг1 и (...) |
|||
7
salvator
15.12.20
✎
17:12
|
(5) Если СоединятьСПервымРегистром = Истина, то фактически в базе данных соединения с "РегистрСведений.МойВторойРС" не будет, я правильно понимаю?
|
|||
8
Dmitrii
гуру
15.12.20
✎
17:13
|
Или еще так.
|
|||
9
Dmitrii
гуру
15.12.20
✎
17:15
|
(7) Да. При значении параметра СоединятьСПервымРегистром = Истина условие соединения с таблицей МойВторойРС всегда будет ЛОЖЬ, а это значит, что из таблицы МойВторойРС ни одна запись в результат не попадёт.
|
|||
10
salvator
15.12.20
✎
17:19
|
(9) Не совсем понял, а само соединение, физически, строится или нет? Такая конструкция влияет на производительность?
|
|||
11
Dmitrii
гуру
15.12.20
✎
17:26
|
(10) >> Такая конструкция влияет на производительность?
Для достоверности лучше бы конечно проверить, но предположу, что не влияет. Оптимизаторы СУБД достаточно умные, чтобы учесть тот факт, что условие соединения всегда ЛОЖЬ. Я бы заморачивался с этим вопросом только когда соединяемые таблицы реально огромны. При относительно небольшом количестве записей (сотни тысяч) разница вряд ли будет ощутима. |
|||
12
salvator
15.12.20
✎
17:32
|
Спасибо большоей!
|
|||
13
youalex
15.12.20
✎
17:32
|
(10) в ms sql было, насколько помню, если условие через переменную, то строится, если через литералы (1=0), то нет.
Как 1С строит запрос в этом случае - надо смотреть. |
|||
14
salvator
15.12.20
✎
17:36
|
(13) Понятно, спасибо за информацию.
|
|||
15
Малыш Джон
15.12.20
✎
17:41
|
(14) Можно через сделать вариант запроса с соединением с одним РС, а по условию - СтрЗаменить(ТекстЗапроса, КусокЗапросаСоСтарымРС, КусокЗапросаСНовымРС).
И в конструкторе открываться будет,и не будет заморочек с производительностью |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |