2010-07-23 6 views
0

Привет У меня есть 2 таблицы:MySQL: LEFT JOIN

События (idEvent, именем_события)

и

зарегистрирования (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 

Это важно иметь idPerson = 1 проверка в РЕГИСТРИРУЙТЕСЬ пункта, а не где положение, в противном случае события, которые человек 1 не зарегестрирована для не будет отображаться.

+0

Почему вы проверяете, является ли idEvent регистрации нулевым? Как только регистрация сделана, она всегда принадлежит к некоторому событию. Это как: У нас есть события и люди регистрируются на них. Так что f.e. 1 событие - 100 регистраций (от 300 человек, скажем так) –

+0

r.idEvent (и все поля r) имеет значение NULL, если для человека нет соответствующей регистрации 1. (Если нет соответствующего r.idEvent = e.idEvent и r .idPerson = 1). – mdma

+0

Я получаю всегда НЕТ, даже если я изменю conditioon на WHEN NULL –