2011-01-05 4 views
0

이것은 간단한 것처럼 보이지만 어떤 이유로 나는 조인 된 테이블에 여러 기준을 검색

내가 레시피 웹 사이트가 ...이 내가 원하는 것을 얻을 수 없습니다 내가되고 싶어 여러 성분이 들어 있는지 여부에 따라 요리법을 검색 할 수 있습니다. 나는 모든 요리법 정보가 담긴 두 개의 테이블과 재료가 들어있는 두 번째 테이블을 가지고 있습니다. 이것은 내가 지금까지 가지고 있지만 레코드를 검색하지 않습니다. 어떤 도움을 주시면 감사하겠습니다. 감사! 당신의 WHERE 절에서 AND이 불가능한 상태로 만들기 때문에 설명은 모든 값을 동시에 어디 하나 개의 행이 없기 때문

SELECT recipe.ID, recipe.Title, recipe.Photo FROM ingredient 
LEFT JOIN recipe ON ingredient.Recipe_ID = recipe.ID 
WHERE (ingredient.Description = 'egg' AND ingredient.Description = 'sugar' AND ingredient.Description = 'salt') 
GROUP BY recipe.ID 
+0

Google "관계형 부문" – onedaywhen

답변

1

당신은 어떤 결과를 얻는되지 않습니다.

0
select recipe.ID, recipe.Title, recipe.Photo 
from(
    select recipe.ID, recipe.Title, recipe.Photo 
    ,count(ingredient.description) as num_ingredients 
    from ingredient left join recipe 
    on ingredient.recipe_id=recipe.ID 
    group by 1,2,3 
    )ingred_count 
where num_ingredients>=2; 

여러 가지 재료로 조리법을보고 싶다면 트릭을해야합니다. 그렇지 않으면, 각 레서피에 대한 재료의 수를 원할 경우 하위 쿼리를 가져옵니다.

0

ingredient 테이블에 Recipe_ID이 포함 된 것으로 보입니다. 실제로는이 쿼리를 매우 쉽게 만들 것입니다. 수행해야 할 작업은 둘 이상의 행에서 어떤 Recipe_ID이 발생하는지 확인하는 것입니다.

SELECT I.recipe_id 
FROM ingredient I 
WHERE COUNT(I.description) > 0 
GROUP BY I.recipe_id 

은 이러한 모든 조리법에 대한 ID를 제공합니다. 그냥 ID보다 더 원하는 경우에 당신은이

SELECT R.* 
FROM ingredient I 
INNER JOIN recipe R on I.recipe_id = R.id 
WHERE COUNT(I.description) > 0 
GROUP BY I.recipe_id 

난 강력하게 당신이 recipe_to_ingredient 같은 이름을 것이다 대다 테이블에보고 제안에 가입해야합니다./ingredient_id 쌍에는 Recipe_ID 것이다 당신이 테이블 recipe이 그런 식으로, 테이블 ingredient와 테이블 recipe_to_ingredient (어쩌면 및 금액?)

2

최소한이 3 개 성분을 가진 모든 요리법을 원한다면, 시도 :

SELECT recipe.ID, recipe.Title, recipe.Photo FROM recipe 
WHERE recipe.ID in (
    SELECT Recipe_ID 
    FROM ingredient 
    WHERE ingredient.Description in ('egg', 'sugar', 'salt') 
    HAVING count(distinct ingredient.Description) = 3 
    GROUP BY Recipe_ID 
) 
+0

이것은 효과가있었습니다. 답변 해 주셔서 감사합니다. –

+0

@Jon : 좋아요. 이 답변 옆에있는 확인란을 선택하는 것보다이 대답을 '수락'할 수 있습니다. – Gerrat

관련 문제