2009-07-28 15 views
0

ここに私の状況です。私はuserテーブルとuserテーブルを参照するpassword_resetテーブルを持っています。これを1つのクエリとして書く方法はありますか?

ユーザー行を参照するpassword_reset行からいくつかのフィールドを返す単一のクエリを実行します。しかし、password_resetに行がない場合、ユーザーの電子メールだけを返したいと思っています。ここではこれまでのことですが、password_reset行を持っている場合には動作しますが、そうでない場合は動作しません(その場合、行がまったく返されません)。

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

これを書くにはどうすればいいですか? 1つのクエリでもそれを実行できますか?

答えて

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

感謝。私のジョイントを本当に読まなければならないと思う。 – 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