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 回答