|   |   | 
| 
 | Соединение в запросе и условие | ☑ | ||
|---|---|---|---|---|
| 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) Можно через сделать вариант запроса с соединением с одним РС, а по условию - СтрЗаменить(ТекстЗапроса, КусокЗапросаСоСтарымРС, КусокЗапросаСНовымРС).
 И в конструкторе открываться будет,и не будет заморочек с производительностью | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |