5

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

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

4 回答 4

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()) 
于 2012-10-17T14:10:44.397 回答
2
SELECT    users.userId, updates.status
FROM      users
LEFT JOIN updates
  ON      updates.userId = users.userId
    AND   DATE(updates.LastUpdated) = DATE(NOW())

将您的条件放在连接中,否则它会强制询问每个连接。LastUpdated或者,您可以检查NULL我相信(因为左连接将仅包括定位信息)。

于 2012-10-17T14:11:55.257 回答
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
于 2012-10-17T14:13:15.720 回答
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
于 2012-10-17T14:26:37.810 回答