web-dev-qa-db-ja.com

テーブル値関数を使用した内部結合が機能しない

テーブルを返すテーブル値関数があります。別のテーブルでテーブル値関数をJOINしようとすると、結果は得られませんが、関数の結果を実際のテーブルにコピーして同じ結合を行うと、期待される結果が得られます。

クエリは次のようになります。

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

全部で約4つのクエリがあり、それぞれにわずかに異なる関数がありますが、すべての関数は同じテーブルを生成しますが、データは異なります。これらのクエリの一部では、INNER JOINは機能しますが、他の人には機能しません。

なぜこれが起こるのか示唆していますか?

31
user2343837

テーブル値関数では、通常Cross Applyを使用します。

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

これはうまくいくと思う

  Select * 
    From Animals 
    Join dbo.AnimalsTypesIds(900343) 
      As AnimalsTypes
      On AnimalsTypes.TypeId = Animals.TypeId

テーブル値関数では、戻りテーブルにTypeIdが必要です。これにより、その句で結合が機能します。

1

結合の「ON」句が間違っている可能性があります。おそらく小さなタイプミスのような

結合x ON oID = odID

の代わりに

JID x ON oID = oID

1
nicko

テーブル値関数のパラメーターがmyTable列に動的に依存していないと仮定した場合、これは機能します。

   SELECT *
    FROM myTable 
    INNER JOIN

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

ただし、パラメータがmyTableに依存している場合は機能しません

1
user2343837