Подтвердить что ты не робот

INNER JOIN с табличной функцией не работает

У меня есть функция таблицы, которая возвращает таблицу. Когда я пытаюсь выполнить JOIN табличную функцию с другой таблицей, я не получаю никаких результатов, но когда я копирую результат функции в фактическую таблицу и выполняю то же соединение, тогда получаю ожидаемые результаты.

Запрос выглядит примерно так:

Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....

Все, что у меня есть около 4 таких запросов, и у каждого из них есть немного разные функции, но все функции производят одну и ту же таблицу, но разные данные. Для некоторых из этих запросов работает INNER JOIN, но для других это не так.

Можно предположить, почему это происходит?

4b9b3361

Ответ 1

С помощью функции, используемой таблицей, вы обычно используете Cross Apply.

Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)

Ответ 2

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

   SELECT *
    FROM myTable 
    INNER JOIN

    (SELECT * from fn_function(@para1, @para2 etc))
 ON ...

но если параметры зависят от myTable, он не будет работать

Ответ 3

Ваше предложение "ON" соединения, скорее всего, неверно. Возможно, небольшая опечатка вроде

JOIN x ON oID = odID

вместо

JOIN x ON oID = oID

Ответ 4

Я думаю, что это должно работать

  select * from Animals 
  join dbo.AnimalsTypesIds(900343) as AnimalsTypes
  on AnimalsTypes.TypeId = Animals.TypeId

В табличной функции таблица возврата должна иметь TypeId, чтобы соединение выполнялось в этом разделе