LEFT加入查询问题

时间:2012-10-17 14:07:43

标签: mysql sql

我在使用以下查询时遇到一些问题 - 在所有情况下,我似乎只获得了一小部分用户而不是整个列表。
我有以下两个表:

Users:

 - UserId
 - email

Updates:

 - UserId 
 - Status
 - LastUpdated

我想要返回的是所有用户(来自用户)的列表,如果它今天更新的状态(基于LastUpdated字段),否则为BLANK或NULL(如果今天没有更新)。

我已经达到了这个目标:

SELECT users.userid, 
       updates.status 
FROM   users 
       LEFT JOIN updates 
              ON users.userid = updates.userid 
WHERE  Date(lastupdated) = Date(Now()) 

4 个答案:

答案 0 :(得分:5)

如果日期是今天,您可以使用CASE语句获取updates.status

SELECT users.userId, 
    CASE WHEN DATE(LastUpdated) = DATE(NOW()) THEN updates.status ELSE NULL END AS status
FROM users 
LEFT JOIN updates ON users.userId=updates.userId

或者,更好的是,如果您不需要updates行中的任何其他内容,请执行以下操作:

SELECT users.userId, updates.status
FROM users 
LEFT JOIN updates ON users.userId=updates.userId
    AND DATE(LastUpdated) = DATE(NOW()) 

答案 1 :(得分:2)

SELECT    users.userId, updates.status
FROM      users
LEFT JOIN updates
  ON      updates.userId = users.userId
    AND   DATE(updates.LastUpdated) = DATE(NOW())

将您的条件置于联接中,否则会强制查询每个联接。或者,您可以检查LastUpdated是否为NULL我认为(因为LEFT加入仅包含所找到的信息)。

答案 2 :(得分:0)

试试这个

   SELECT users.userId, case when  DATE(LastUpdated) = DATE(NOW())
 updates.status else null end as status
     FROM users 
LEFT JOIN updates ON users.userId=updates.userIdd

答案 3 :(得分:0)

我认为你所追求的是左外连接以返回所有用户,而不仅仅是今天有更新的用户。那应该是这样的:

SELECT users.userid, updates.lastupdated
  FROM users
  LEFT OUTER JOIN (
    SELECT * FROM updates WHERE DATE(lastupdated) = DATE(NOW())
    ) updates ON users.userid = updates.userid