2010-11-29 3 views
4

mysql : 왼쪽으로 결합하지만 결합 된 테이블에서 하나의 특정 항목 만 선택

구성원 테이블,

xxxxx 구성원 테이블에서 매번 한 행을 선택하려고합니다. profile_picture에서 승인 된 이미지 하나. 이 멤버가 둘 이상의 업로드 된 이미지를 가지고있을 때 왼쪽 멤버를 사용하고 있지만 선택한 멤버가 복제되므로 제대로 작동하지 않습니다. 까다로운 부분은 승인 된 이미지를 선택하고 항상 한 장의 이미지 만 승인된다는 것입니다.

SELECT * 
    FROM member 

    LEFT JOIN profile_picture 
    ON profile_picture.member_id = member.member_id 

    WHERE member.member_id = '1' 

출력으로 이것을 얻고 싶습니다.

member_id member_name image_id image_approved 
1   xxx   3  yes 

가능합니까?

감사합니다.

편집 :

제안에 감사드립니다. 많은 사람들이 를 사용하도록 제안했습니다 - 예 : AND profile_picture.image_approved = '예'

이미지가있는 경우에만 작동합니다. 하지만 이미지가 없다면 이미지가없는 경우 아래에 출력해야하지만 출력에 아무 것도 없습니다.

member_id member_name image_id image_approved 
1   xxx   null  null 

다시 한번 감사드립니다!

답변

2
select 
    * 
from 
    member m 
    left join profile_picture p on p.member_id = m.member_id 
where 
    m.member_id = '1' 
    and (p.image_approved is null or p.image_approved = 'yes') 

image_approved은 조인 조건의 일부가 아닌, 그래서 join 절에 그 넣지 마십시오 이러한 추가. 그것은 행 선택 조건의 일부이기 때문에 where에 있습니다. 원하는 것을 생각하면 profile_picture 또는 승인 된 행에 아무 것도 원하지 않을 수도 있습니다. 그래서, 조건.

+0

감사합니다. m과 p가 무엇을 의미하는지 물어봐도 될까요 ?? 감사. – laukok

+1

'm'과'p'는 테이블 alise입니다. 'as' 키워드는 선택적이고 묵시적이기 때문에'member'는'm'에 앨리어스되고'profile_picture'는'p'에 앨리어스됩니다. – Donnie

+0

이제 알겠습니다. 정말 고마워! :-) – laukok

0

쿼리에 image_approved 조건을 추가하면 주어진 입력에 필요한 출력이 제공됩니다.

SELECT * 
    FROM member 

    LEFT OUTER JOIN profile_picture 
    ON profile_picture.member_id = member.member_id 

    WHERE member.member_id = '1' 
      AND image_approved = 'yes' 
0

당신은 의미합니까 :

SELECT * 
    FROM member 
    LEFT JOIN profile_picture 
    ON profile_picture.member_id = member.member_id 
    WHERE member.member_id = '1' 
    AND profile_picture.image_approved = 'yes' 
0

당신은 INNER JOIN이 적합한 LEFT JOIN 사용할 필요가 없습니다. profile_picture에 대한 열이 필요합니까?

SELECT 
    * 
FROM 
    member 
    JOIN profile_picture USING (member_id) 
WHERE 
    member_id = 1 
    AND image_approved = 'yes' 

오른쪽 테이블에서 하나 이상의 열을 가질 가능성이있는 당신은 하나를 얻으려면 : 당신이 필요로하는 모든 추가 WHERE 상태는 것 같다? 마지막으로 승인 된 이미지를 원하십니까?

GROUP BY 
    member_id 
ORDER BY 
    image_id 
+0

결과는 0 이미지 구성원을 포함하지 않습니다. – ksogor

+0

그의 질문에서 그렇다고 들리지는 않지만 해결하기 쉽습니다. JOIN을 LEFT JOIN으로 변경하고 image_approved 조건을 ON 절에 넣으십시오 (현재 USING 절) –

0

어느 도니가 권장하는대로 WHERE 절에서 널 (null)을 수용하거나처럼 2 테이블을 제한하기 위해 테이블 ​​식을 사용

Select member.member_id, member_name, image_id, image_approved 
From member LEFT Outer Join 
    (Select image_id, member_id, image_approved 
     From profile_picture 
     Where image_approved = 'yes') Images 
      on Images.member_id = member.member_id 
관련 문제