テーブルを返すテーブル値関数があります。別のテーブルでテーブル値関数をJOIN
しようとすると、結果は得られませんが、関数の結果を実際のテーブルにコピーして同じ結合を行うと、期待される結果が得られます。
クエリは次のようになります。
Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....
全部で約4つのクエリがあり、それぞれにわずかに異なる関数がありますが、すべての関数は同じテーブルを生成しますが、データは異なります。これらのクエリの一部では、INNER JOIN
は機能しますが、他の人には機能しません。
なぜこれが起こるのか示唆していますか?
テーブル値関数では、通常Cross Apply
を使用します。
Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)
これはうまくいくと思う
Select *
From Animals
Join dbo.AnimalsTypesIds(900343)
As AnimalsTypes
On AnimalsTypes.TypeId = Animals.TypeId
テーブル値関数では、戻りテーブルにTypeIdが必要です。これにより、その句で結合が機能します。
結合の「ON」句が間違っている可能性があります。おそらく小さなタイプミスのような
結合x ON oID = odID
の代わりに
JID x ON oID = oID
テーブル値関数のパラメーターがmyTable列に動的に依存していないと仮定した場合、これは機能します。
SELECT *
FROM myTable
INNER JOIN
(SELECT * from fn_function(@para1, @para2 etc))
ON ...
ただし、パラメータがmyTableに依存している場合は機能しません