2010-07-23 2 views
0

가입 :MySQL의 : LEFT 안녕하세요 2 개 테이블이

이벤트 (idEvent, EVENTNAME)를

등록 (idRegistration, idEvent, idPerson)

사람들은 등록 이벤트에 나는 그들의 idPerson을 저장합니다. 이제 우리는 2 개의 이벤트 (event1과 event2)가 있다고 가정 해 봅시다. 저는 id = 1 인 사람입니다. 등록되어 있다면 저를 말할 모든 사건과 기둥을보고 싶습니다.

idEvent eventName IamRegistered 
1  event1  yes 
2  event2  no 

이 어떻게 비슷한 출력을 볼 수있는이 두 테이블에서 쿼리를 작성할 수 있습니다 출력처럼

내 말은?

PS : 저는 SQL 구문을 알고 있지만 왼쪽

답변

4

당신은 올바른 것, 그것은 조인 왼쪽 아마 가입으로 뭔가를 알아낼 수 없습니다. CASE 표현식은 일치하는 레코드가 있는지 여부에 따라 예 또는 아니오를 출력합니다.

SELECT e.idEvent, e.EventName, (CASE r.idEvent WHEN NOT NULL THEN 'Yes' ELSE 'No' END) AS IsRegistered FROM Events e 
    LEFT JOIN Registrations r ON r.idEvent=e.idEvent AND r.idPerson=1 

그렇지 않으면, Where 절보다는 가입 절에 idPerson = 1 체크를하는 사람 (1)이 표시되지 않습니다에 대한 registred되지 않은 이벤트 중요합니다.

+0

왜 등록의 idEvent가 null인지 확인합니까? 등록이 완료되면 항상 일정한 이벤트에 속하게됩니다 .. 마치 : 우리에게는 이벤트가 있고 사람들이 등록합니다. 그래서 f.e. 1 이벤트 - 100 건 등록 (300 명부터) –

+0

r.idEvent (그리고 모든 r의 필드)는 사람 1에 대해 일치하는 등록이 없을 때 null입니다. (일치하는 r.idEvent = e.idEvent가 없으면 r .idPerson = 1). – mdma

+0

WHEN NULL에 conditioon을 변경하더라도 항상 NO를 얻습니다. –