Использование логического "ИЛИ" в секции "ПО" запроса
Не рекомендуется использовать логическое ИЛИ
в условиях соединения, то есть в секции ПО
запроса. Это так же может привести к выбору неоптимального плана и медленной работе запроса. Простого универсального способа переписать такой запрос без использования ИЛИ
не существует. Следует проанализировать решаемую задачу и попытаться найти другой алгоритм ее решения.
Например, неправильно:
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
ЗагружаемыйПрайсПоставщика.Цена КАК Цена
ИЗ
ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика
ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура
ПО (ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование
ИЛИ ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул)
Правильно:
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
ЗагружаемыйПрайсПоставщика.Цена КАК Цена
ИЗ
ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика
ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура
ПО ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование
ОБЪЕДИНИТЬ
ВЫБРАТЬ
СправочникНоменклатура.Ссылка,
ЗагружаемыйПрайсПоставщика.Цена
ИЗ
ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика
ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура
ПО ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул
Экранирование кода
// sonar:UsingLogicalOrInOn:off
// sonar:UsingLogicalOrInOn:on