Amr Mohammad Rashad Ответов: 2

Левое соединение нескольких функций


Приветствия,

Если бы я оставил соединение нескольких функций с заданным запросом, то каждая из них имела бы условие соединения, отличное от другого. Будут ли выполняться все эти функции или будет выполняться только та, которая имеет правильное условие. Я знаю, что мои слова могут сбить с толку, поэтому постараюсь объяснить на примере

query LEFT JOIN function1(parameters) on categorycolumn = 1
      LEFT JOIN function2(parameters) on categorycolumn = 2


Что я уже пробовал:

Попытался найти ответ в google и попытался отладить, однако отладчик SSMS не работает для меня.

2 Ответов

Рейтинг:
1

RickZeeland

Может быть, вы можете использовать ПРИМЕНЯТЬ, см. пример здесь: sql server-как сделать левое внешнее соединение UD-функции с любой SQL-таблицей? - переполнение стека[^]


Amr Mohammad Rashad

Можно использовать как оператор APPLY, так и оператор JOIN, и они будут иметь один и тот же результат, но я спрашивал с точки зрения производительности, то есть с одной стороны. С другой стороны, я спрашивал, есть ли способ предотвратить выполнение запроса внутри функции вместо использования операторов IF в теле функции для такого предотвращения.

Рейтинг:
1

Jörgen Andersson

Это с точки зрения производительности вообще плохая идея помещать функции в FROM пункт.
Посмотрите, сможете ли вы переместить их в SELECT предложение, то вы также можете отфильтровать их с помощью CASE.
Подобный этому:

SELECT  CASE 
            WHEN categorycolumn = 1 THEN function1(parameters) 
            WHEN categorycolumn = 2 THEN function2(parameters)
        END AS MyResult
FROM...

Если результаты не совместимы, их достаточно легко разделить на несколько случаев.


Amr Mohammad Rashad

Я проверю, можно ли это сделать в моем случае.