有没有办法把它写成一个查询?

时间:2009-07-28 20:03:03

标签: sql

这是我的情况。我有一个用户表和一个引用用户表的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

我怎么写这个?我甚至可以只用一个查询来做到这一点吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

SELECT Users.email
FROM   Users
    LEFT JOIN Password_resets ON Users.PrimaryKey = Password_resets.ForeignKey
WHERE Password_resets.ForeignKey IS NULL

答案 2 :(得分: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