2010-07-23 223 views
0

你好,我有2個表:MySQL的:LEFT JOIN

活動(idEvent,eventName的)

註冊(idRegistration,idEvent,idPerson)

人登記到事件和我存儲他們的idPerson。現在讓我們說,我們有2個事件(event1和event2)。我是id = 1的人,如果我已註冊,我希望看到所有會說我的事件和專欄。

我的意思是像輸出:

idEvent eventName IamRegistered 
1  event1  yes 
2  event2  no 

我怎樣才能寫出這兩個表的查詢看到similiar輸出?

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 

有JOIN子句中的idPerson = 1支票,而不是Where子句是很重要的,否則這個人1不registred用於將不顯示事件。

+0

你爲什麼要檢查,如果註冊的idEvent爲空?一旦註冊成功,它總是屬於某個事件。 這就像:我們有事件和人員註冊給他們。所以f.e. 1名事件 - 100名註冊(300人假設) – 2010-07-23 12:22:46

+0

r.idEvent(和所有的r領域)爲空時,有對的人1(沒有匹配的登記如果沒有匹配r.idEvent = e.idEvent和r .idPerson = 1)。 – mdma 2010-07-23 12:26:52

+0

即使將條件更改爲WHEN NULL,我總是得到NO。 – 2010-07-23 12:51:31