2014-06-30 2 views
1

두 개의 테이블이 있습니다. 하나는 내용 용이고 다른 하나는 이미지 용입니다.두 개의 테이블을 조인의 매개 변수로 사용하여 두 테이블을 조인하는 방법은 무엇입니까?

내 문제는 : 이미지가 필수 필드가 아니지만 이미지가 존재하는 경우 열 i.type은 지정된 숫자 여야합니다.

동일한 ID를 가진 다른 테이블의 컨텐츠를 반환합니다. (잘못된 것임을 알고 있지만, 지금은 전부입니다.) 여기

그렇게 할 수있는 방법이 있습니까 쿼리

SELECT e.*, i.imagem, i.folder 
FROM event e 
LEFT JOIN img_rel i ON e.id = i.rel 
WHERE e.slug = 'slug' 
AND e.type = 'even'; 

또는 내가 PHP를 사용하여 필터링 할 것인가?

+0

정확히 무엇을 요구하고 있는지 명확하지 않습니다. 하지만 당신은 ON 절에 'i.type'에 술어를 포함시키고 싶습니다. **'on id.rel = e.id = i.rel AND i.type = '특정 숫자'**. (술어를 ON 절에 포함시킴으로써 "외부"조인으로 남아 있습니다.이 술어를 WHERE 절에 넣으면 조인의 "외부"가 무효화됩니다. (일치하는 행이 없으면 SELECT 목록에있는 'i'의 열은 NULL이됩니다.) – spencer7593

답변

2

을 수 있을까요?

+0

완벽하게 작동했습니다. 감사합니다. –

+0

+1 upvote를받지 않고 어떻게 받아 들일지 잘 모르겠습니다. – Umbrella

1

당신은 당신이 가입의 ON 절에 대해 원하는

SELECT 
    e.*, 
    CASE 
    WHEN i.imagem IS NOT NULL 
    AND i.type = 'your number' 
    THEN i.imagem 
    ELSE NULL 
    END AS imagem, 
    i.folder 
FROM 
    event e 
    LEFT JOIN img_rel i 
    ON e.id = i.rel 
WHERE e.slug = 'slug' 
    AND e.type = 'even'; 
+1

이 기능이 마음에 들었습니다.이 기능을 사용하려고합니다. 감사합니다. –

+0

그냥 추가하는 것보다 성능이 좋지 않습니까? ON 절에 또 다른 조건이 있습니까? – Umbrella

0

당신은 많은 열을 사용할 수 있습니다 귀하의 요청에 CASE를 사용할 수 있습니다. 조인에 정적 필터를 추가 할 수도 있습니다.

join ... on ... and (i.imagem IS NULL or i.type = 'myspecialvalue') 

당신이 필요

Select * 
From Table1 t1 Left Join 
     Table2 t2 On t1.col1 = t2.col2 
       And t1.col2 = t2.col2 
       And t1.col3 = 'something static' 
Where t1.col1 = 'this will match both col1 and t2.col1' 
관련 문제