サブクエリで関数を使用する t-sql でクエリを作成していて、2 つの質問に遭遇しました。次のような広告テーブルを想像してください。
AdID- Name
次のようなオプション テーブル:
OptionID - OptionName
そして、2 つの外部キー列を持つこれら 2 つの間のジャンク テーブル (AdvertisementOptionLink) :
AdID - OptionID
ユーザーがオプションを選択すると、広告を照会したいと思います。私は次のようなクエリを書きました:
SELECT * FROM Advertisement ad
INNER JOIN AdvertisementOptionLink aol
WHERE ad.AdvertisementID IN (SELECT AdvertisementID FROM UDF_GetAdvertisements)
現在、UDF_GetAdvertisements は、特定のオプションを持つ広告のリストを返すテーブル値関数です。
2 つの質問があります。
- この UDF_GetAdvertisements 関数は、各行のすべてのデータをクエリしますか? つまり、テーブルに 2000 件の広告がある場合、それらすべてをクエリしてすべての広告 ID を返すということですか? 関数の戻り値を変数に保存したほうがよいでしょうか?
2.このデータベースには、オプションのない広告がいくつかあります。ユーザーがオプションを選択しない場合、どのようにすればすべての広告を返すことができますか?
t-sql でテーブル値パラメーターを使用して、選択したオプション ID をストアド プロシージャ経由で渡します。このページから少し助けを借りました: http://www.sommarskog.se/arrays-in-sql-2008.html