Перейти к содержанию

Использование логического "ИЛИ" в секции "ПО" запроса

Не рекомендуется использовать логическое ИЛИ в условиях соединения, то есть в секции ПО запроса. Это так же может привести к выбору неоптимального плана и медленной работе запроса. Простого универсального способа переписать такой запрос без использования ИЛИ не существует. Следует проанализировать решаемую задачу и попытаться найти другой алгоритм ее решения.

Например, неправильно:

ВЫБРАТЬ
 СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
 ЗагружаемыйПрайсПоставщика.Цена КАК Цена
ИЗ
 ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика
  ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура
  ПО (ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование
    ИЛИ ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул)

Правильно:

ВЫБРАТЬ
  СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
  ЗагружаемыйПрайсПоставщика.Цена КАК Цена
 ИЗ
  ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура
   ПО ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование

 ОБЪЕДИНИТЬ

 ВЫБРАТЬ
  СправочникНоменклатура.Ссылка,
  ЗагружаемыйПрайсПоставщика.Цена
 ИЗ
  ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура
   ПО ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул

Экранирование кода

// sonar:UsingLogicalOrInOn:off
// sonar:UsingLogicalOrInOn:on