2016-07-29 3 views
1

에 존재하지 않는 내가있어 내과 같이 작업에 참여 :MySQL은 - 조인 - 데이터 표시가되면 다른 테이블

SELECT * 
FROM fixtures f, 
    channel c, 
    fixture_channel_join fcj 
WHERE f.matchday = '1' 
AND f.fixtures_id = fcj.fixture_id 
AND fcj.channel_id = c.id 

그러나 이것은 단지 채널과 fixture_channel_join에서 데이터가 행을 보여줍니다. 조명기에서 모든 데이터를 표시 할 수 있습니까? 조인이없는 경우 열에 null 데이터 만 표시하면됩니까?

감사

SELECT * 
FROM fixtures f 
LEFT JOIN fixture_channel_join fcj ON f.fixtures_id = fcj.fixture_id 
LEFT JOIN channel c ON fcj.channel_id = c.id 
WHERE f.matchday = '1' 
+2

* 안 *은'FROM' 절에서 사용 쉼표. * 항상 * 적절한 JOIN 구문을 사용하십시오. –

답변

1

수행 한 작업은 암시 적 조인이며 INNER JOIN입니다. 읽고 혼란스러워서 반대합니다.

LEFT JOIN 또는 RIGHT JOIN을 찾고 있습니다.

SELECT * 
FROM fixtures f, 
LEFT JOIN fixture_channel fcj ON f.fixtures_id = fcj.fixture_id 
LEFT JOIN channel c ON fcj.channel_id = c.id 
WHERE f.matchday = '1' 

이 당신에게 일치하지 않는 사람들을 포함하여 fixtures 테이블의 모든 값을 (줄 것이다 : LEFT JOIN는 결과의 오른쪽 부분에 NULL로 채우고, 당신이 왼쪽에있는 모든 값을 제공합니다) 다음에 fixture_channel 테이블 (일치 항목이없는 NULL 값)과 일치하는 값 다음에 channe 테이블 (일치하는 값이없는 NULL 값)의 일치 값이옵니다.

대안이하는 RIGHT JOIN 왼쪽에 NULL로 작성, 오른쪽에서 당신에게 모든 값을 줄 것이다 :

SELECT * 
FROM fixtures f, 
RIGHT JOIN fixture_channel fcj ON f.fixtures_id = fcj.fixture_id 
RIGHT JOIN channel c ON fcj.channel_id = c.id 
WHERE f.matchday = '1' 

이 당신에게 channel 테이블의 모든 값을 줄 것이다 (포함을하는 일치하지 않습니다) fixture_channel 테이블 (어떤 채널과도 일치하지 않는 사용자의 경우 NULL 값)의 값 앞에는 fixture 테이블 (조명기와 일치하지 않는 fixture_channel 값의 값은 NULL)이 앞에옵니다. 이를 오른쪽에서 왼쪽으로 진행하는 것을 설명하기 위해이 부분을 뒤쪽으로 보았습니다. 대한

더 많은 삽화와 함께, here 조인 :

+0

자세한 답변을 주셔서 감사합니다. 정말 도움이됩니다! – BCLtd

+1

반갑습니다. 내가 제안한 것과 같은 몇 가지 문서를 찾아 조인에 대해 잘 이해하십시오. 제대로 된 경우 매우 강력합니다. 또한 빠른 팁으로서 참여하는 열에 인덱스를 추가하는 것을 잊지 마십시오. 실제로 성능에 도움이됩니다. 건배! – evilpenguin

1

.

SELECT * 
FROM fixtures f 
LEFT OUTER JOIN fixture_channel_join fcj ON f.fixtures_id =fcj.fixture_id 
LEFT OUTER JOIN channel c ON fcj.channel_id = c.id 
WHERE f.matchday = '1' 
+0

치료를 해주셔서 감사합니다 – BCLtd

1

left join은 LEFT OUTER JOIN을 사용해보십시오 사용