我在使用以下查询时遇到一些问题 - 在所有情况下,我似乎只获得了一小部分用户而不是整个列表。
我有以下两个表:
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())
答案 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