2010-06-24 3 views
1

한 테이블의 행을 필터링하고 다른 테이블의 결과를 조인 한 다음 추가 행을 필터링하려고 쿼리를 처리하려고합니다. 여기 조인의 하위 쿼리

내가 작성한 쿼리입니다 ". 모든 파생 테이블은 자신의 별명을 가지고 있어야합니다"

SELECT * 
    FROM (SELECT media.id AS id2, media.flagged AS flagged2, media.item_status AS status2 
      FROM media 
     WHERE flagged2 != 'nsfw' 
      AND status2 != 'deleted' 
    ORDER BY id2 DESC LIMIT 0,5) 
    JOIN media on info.mid = media.id 
WHERE info.topic = 'food_drink' 
    OR info.topic='cooking' 
GROUP BY info.mid 

내가 작업 쿼리를 얻기에 아주 가까이라고 생각하지만이 메시지를 받고 계속 나는 이것을 봤어 그리고 내가 읽은 부분에서 내가 시도한 하위 쿼리의 별칭을 필요로하지만 여전히 작동시키지 못한다.

+0

빠른 질문 ... "정보"는 어디서 났습니까? 별칭이나 테이블입니까? – hallie

+0

@hallie : Eric이 테이블 별칭을 사용하지 않았다는 것을 감안할 때, 나는 그것이 테이블이라고 믿습니다. Eric은 INFO에 대한 참조가이 쿼리에 있어야하는지 그렇지 않으면 파생 테이블과 관련이 있는지 알려야합니다 ... –

+0

나는 그 정보를 ... JOIN media on info.mid = media.id. .. 실제로 있어야합니다 ... info.mid = media.id에 ** 정보 **에 가입하십시오 ... –

답변

3

사용 :

SELECT * 
    FROM (SELECT media.id AS id2, media.flagged AS flagged2, media.item_status AS status2 
      FROM media 
     WHERE flagged2 != 'nsfw' 
      AND status2 != 'deleted' 
     ORDER BY id2 DESC LIMIT 0, 5) x 
    JOIN media on info.mid = media.id 
WHERE info.topic = 'food_drink' 
    OR info.topic='cooking' 
GROUP BY info.mid 

그냥 브래킷 외부하지만, 가입 전에 x 참조? 그것이 바로 오류입니다. FROM과 JOIN 전에 괄호 안의 내용은 파생 된 테이블 (일명 인라인 뷰)이며, MySQL은 테이블 별칭을 지정해야합니다. 그런 다음 내부에서 열을 참조 할 때 x.id2/등을 사용합니다.

+0

아, 그 말이 맞습니다. 앨리어스 (alias)해야 할 부분이 서브 쿼리에 있다고 생각했습니다. 입력을 기반으로 쿼리를 다시 작성하면 완벽하게 작동합니다! – Eric