2

私は2つのテーブルを持っています、CategoriesそしてRecipeCategories

**Categories**
CategoryID varchar (Primary Key)
Name varchar

**RecipeCategories**
RecipeID varchar
CategoryID varchar
Composite primary key

すべてのカテゴリのCategoryIDとNameに加えて、レシピが実際にそのカテゴリに含まれているかどうかを返す方法を探しています。私は次のようなものを使うことができます

SELECT c.CategoryID, c.Name, 
         (SELECT COUNT(*) 
          FROM RecipeCategories 
          WHERE RecipeID = @recipeId AND CategoryID = c.CategoryID))
FROM Categories c

しかし、テーブルが大きくなりすぎた場合、それは拡大縮小するとは思いません。

4

2 に答える 2

1
SELECT c.CategoryID
     , c.Name
     , Case When (r.RecipeID is null) Then 'No' Else 'Yes' End
  FROM Categories c
  left join RecipeCategories r on r.CategoryID = c.CategoryID
                              and r.RecipeID = @recipeId
于 2011-12-24T16:38:14.107 に答える
0

以下の例を使用できますが、このソリューションを大規模な環境でスケーラブルにするには、RecipeIDにインデックスを付ける必要があります。

SELECT c.CategoryID, c.Name, count(rc.Composite) FROM Categories c
LEFT JOIN RecipeCategories rc ON c.CategoryID = rc.CategoryID
WHERE RecipeID = @recipeId
GROUP BY c.CategoryID, c.Name;
于 2011-12-24T16:44:04.570 に答える