2009-07-28 7 views
0

여기 내 상황이 있습니다. user 테이블과 user 테이블을 참조하는 password_reset 테이블이 있습니다.이것을 하나의 쿼리로 작성하는 방법이 있습니까?

사용자 행을 참조하는 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 

어떻게 작성하나요? 하나의 쿼리만으로도이 작업을 수행 할 수 있습니까?

답변

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 
관련 문제