2010-03-09 3 views
0

아래에서 내 검색어에 대한 도움을 찾고 있습니다. 결코 채식을 위해 아무것도 돌려 보내지 않고있다. .. 나는 나의 WHERE 진술이 유효하게 쓰여지는 방법인가?MySQL, SQL Select 문, OR과 함께하는 위치 ...이 문제가 무엇입니까?

SELECT * 
FROM newsfeed INNER JOIN newsfeedaction ON newsfeed.newsfeedactionid = newsfeedaction.newsFeedActionID 
    INNER JOIN person ON newsfeed.personID = person.personID 
    LEFT OUTER JOIN food ON newsfeed.foodID = food.foodID 
    LEFT OUTER JOIN veggie ON newsfeed.veggieID = veggie.veggieID 
WHERE 
    (
    newsfeed.veggieID IS NOT NULL 
    AND veggie.deleted = 'N' 
) 
OR 
    (
    newsfeed.foodID IS NOT NULL 
    AND food.deleted = 'N') 
+0

있는 곳보다 더 빠르다는 것을 온라인으로 읽기 – hallie

+0

죄송합니다. 도와주세요 :) – AnApprentice

+0

예상되는 레코드가 표시되지 않는 이유를 보려면 예제 데이터를 참조해야합니다. –

답변

-1

노조는 두 데이터 집합 사이의 트릭을했고, 나는 두 개의 선택 사이의 UNION 친절 쿼리를 완료 2 개 그룹

1

where 절이 불완전합니다. 두 번째 조건 세트가 완료됩니다.

SELECT * 
    FROM NEWSFEED nf 
    JOIN NEWSFEEDACTION nfa ON nfa.newfeedactionid = nf.newsfeedactionid 
    JOIN PERSON p ON p.personid = nf.personid 
    JOIN FOOD f ON f.foodid = nf.foodid 
      AND f.deleted = 'N' 
    JOIN VEGGIE v ON v.veggieid = nf.veggieid 
       AND v.deleted = 'N' 

쿼리는 달리 정확하지만 NEWSFEED 기록이 모두 VEGGIEFOOD 테이블에서 지원 기록을 가지고 있어야 필요

+0

그건 내 끝에 나쁜 붙여 넣기했다. 위의 내용은 문제가 아니기 때문에 업데이트 중입니다. – AnApprentice

+0

OMG Ponies가 제공 한 쿼리를 다시 작성하고 조건을 충족하는 데이터가 있는지도 확인하십시오. 데이터가 제공되지 않으므로 다른 사람이 데이터를 확인할 수 없습니다. – Kangkan

1

VEGGIE.veggieid하지 않는 한, 사용 (마찬가지로 FOOD.foodid에 대한) 널 (null)이 될 수 있습니다. ... 나는 그것이 복사 - 붙여 넣기 오류라고 생각