2010-07-23 9 views
0

Bonjour j'ai 2 tables:MySQL: LEFT JOIN

Events (IdEvent, eventName)

et

Les inscriptions (idRegistration, IdEvent, idPerson)

de personnes inscrites aux événements et je stocke leur idPerson. Disons que nous avons 2 événements (event1 et event2). Je suis une personne avec id = 1 et je veux voir tous les événements et les colonnes qui me diront, si je suis inscrit.

Je veux dire une sortie comme:

idEvent eventName IamRegistered 
1  event1  yes 
2  event2  no 

Comment puis-je écrire une requête à partir de ces deux tables pour voir la sortie similaire?

PS: Je sais que la syntaxe SQL, mais ne peut pas comprendre, quelque chose à gauche rejoindre probablement

Répondre

4

Vous avez raison, il est une jointure gauche. L'expression CASE renvoie Oui ou Non selon si un enregistrement correspondant a été trouvé.

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 

Il est important d'avoir le contrôle idPerson = 1 dans la clause JOIN plutôt que la clause Where, sinon les événements qui personne 1 n'est pas INSCRITS pour ne sera pas affichée.

+0

pourquoi vérifiez-vous si idEvent d'enregistrement est null? Une fois l'inscription faite, elle appartient toujours à un événement. C'est comme: Nous avons des événements et les gens s'enregistrent auprès d'eux. Donc, f.e. 1 événement - 100 enregistrements (de 300 personnes disons) –

+0

r.idEvent (et tous les champs de r) est null lorsqu'il n'y a pas d'enregistrement correspondant pour la personne 1. (Quand il n'y a pas de r.idEvent correspondant = e.idEvent et r .idPerson = 1). – mdma

+0

Je reçois toujours NON, même si je change conditioon à QUAND NULL –