2011-12-24 4 views
2

나는 조리법이 그 범주에 실제로 있는지 여부 플러스, 모든 카테고리의 카테고리 ID와 이름을 반환하는 방법을 찾고 있어요 두 테이블, CategoriesRecipeCategoriesSQL 하위 쿼리 최적화

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

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

있습니다. 나는 비슷한 것을 사용할 수있다

그러나 나는 테이블이 너무 커지면 확장하지 않을 것이라고 생각한다.

답변

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 
+0

대신에. 흥미로운 솔루션, 감사합니다. – Echilon

+0

예, 'RecipeID = @ recipeId'는 (는) 조인 조건에 있어야합니다. 그렇지 않으면 한 행만 얻을 수 있습니다. – DavidEG

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;