2009-07-28 5 views
0

Voici ma situation. J'ai une table d'utilisateur et une table de password_reset qui fait référence à la table d'utilisateur.Existe-t-il un moyen d'écrire ceci comme une requête?

Je souhaite exécuter une requête unique qui retournera certains champs d'une ligne password_reset faisant référence à leur ligne utilisateur. Toutefois, je souhaite renvoyer uniquement le courrier électronique de l'utilisateur s'il n'a PAS de ligne dans password_reset. Voici ce que j'ai jusqu'à présent, qui fonctionne dans le cas où ils ont une ligne password_reset, mais pas s'ils ne le font pas (dans ce cas, il ne retourne aucune ligne).

SELECT u.email, p.code, p.expires 
FROM users u, password_resets p 
WHERE u.username = :username 
     AND u.id = p.user_id 

Comment pourrais-je écrire? Puis-je même le faire avec une seule requête?

Répondre

4
SELECT u.email, p.code, p.expires 
FROM users AS u 
LEFT JOIN password_resets AS p USING (u.id = p.user_id) 
WHERE u.username = :username 
+0

Merci. Je suppose que je dois vraiment lire sur mes jointures. – ryeguy

1
SELECT Users.email 
FROM Users 
    LEFT JOIN Password_resets ON Users.PrimaryKey = Password_resets.ForeignKey 
WHERE Password_resets.ForeignKey IS NULL 
1
SELECT u.email, p.code, p.expires 
    FROM users u 
LEFT JOIN password_resets p 
ON 
    u.id = p.user_id 
WHERE u.username = :username 
Questions connexes