2010-08-20 3 views
0

나는 다음과 같은 SQL 쿼리 느릅 나무 3 개 테이블 '작업', '미디어'와 'work_media'나는 그와 관련된 미디어의 1 모든 일을 할SQL 선택 질문

, 다음과 같은 SQL 쿼리의 결과를 선택해야 것을 수행. 하지만 실제로 연결된 미디어가있는 작품 만 반환하고 원하는 작품이 아니라면 미디어가없는 작품도 반환해야합니다. 어떻게 할 수 있습니까?

SELECT work. id, work. title, work. file_name_thumb FR work, media, media_work 어디에서 media_work. work_id = work.id 및 media_work. media_id = media.id GROUP BY work. id ORDER BY work. id DESC

답변

0

는 가입 :

SELECT work.id, work.title, work.file_name_thumb FROM work 
LEFT OUTER JOIN media_work ON media_work.work_id = work.id 
LEFT OUTER JOIN media ON media_work.media_id = media.id 
GROUP BY work.id ORDER BY work.id DESC; 

LEFT OUTER 오른쪽 테이블에 해당하는 행이없는 경우에도 그 왼쪽에있는 테이블의 모든 행이 포함됩니다 가입하세요. 누락 된 행은 NULL로 채워지므로주의하십시오.

+0

감사! 그 작품 !!!! 모든 빠른 답변! 큰! – waterschaats

+0

작품에 첨부 된 모든 미디어를 선택하는 방법이 있습니까? – waterschaats

0

OUTER JOIN을 사용해야합니다.

0

사용이에 대한 LEFT OUTER JOIN :

SELECT w.id, w.title, w.file_name_thumb 
FROM work w 
LEFT JOIN media_work mw ON mw.work_id = w.id 
LEFT JOIN media m ON m.id = mw.media_id 
GROUP BY w.id 
ORDER BY w.id DESC; 

정말 싶어 모든 일을 볼 경우, 정확히 원하는 것을 알고하지 마십시오

SELECT w.id, w.title, w.file_name_thumb 
FROM work w 
LEFT OUTER JOIN media_work mw ON mw.work_id = w.id 
LEFT OUTER JOIN media m ON mw.media_id = m.id 
GROUP BY w.id 
ORDER BY w.id DESC 
+0

이 솔루션에 동의합니다. LEFT OUTER JOIN을 사용하면 다른 테이블에 대한 링크가 없어도 작업 테이블의 모든 레코드가 결과에 표시됩니다. – dvanaria

+0

고마워, 그걸 시도해 볼게! – waterschaats

+0

'mw.media_id = m.id'를 제외하고는 똑같은 질의가 정확합니다. 위대한 마음은 똑같이 생각합니다. ;-) –

0

당신이 뭔가를 시도해야한다 심지어 미디어가없는 경우에도 정상적으로 작동하며, 그렇지 않은 경우 첫 번째 LEFT JOINRIGHT JOIN이어야합니다. 당신은 OUTER를 사용해야합니다

+0

btw이 코드 부분은 미디어의 별칭 (m)을 만듭니다? 'LEFT JOIN media m' – waterschaats

+0

예, 가능합니다. 그것은'media AS m'의 짧은 버전 일뿐입니다. –