Mysql 左连接查询问题与
我在执行以下查询时遇到了一些问题-在所有情况下,我似乎只返回一小部分用户,而不是整个列表。Mysql 左连接查询问题与,mysql,sql,Mysql,Sql,我在执行以下查询时遇到了一些问题-在所有情况下,我似乎只返回一小部分用户,而不是整个列表。 我有以下两个表格: Users: - UserId - email Updates: - UserId - Status - LastUpdated 我想要返回的是所有用户(来自用户)的列表,如果它们的状态是今天更新的(基于LastUpdated字段),否则为空或NULL,如果它今天没有更新 我已经做到了这一点: SELECT users.userid, updates
我有以下两个表格:
Users:
- UserId
- email
Updates:
- UserId
- Status
- LastUpdated
我想要返回的是所有用户(来自用户)的列表,如果它们的状态是今天更新的(基于LastUpdated字段),否则为空或NULL,如果它今天没有更新
我已经做到了这一点:
SELECT users.userid,
updates.status
FROM users
LEFT JOIN updates
ON users.userid = updates.userid
WHERE Date(lastupdated) = Date(Now())
您可以使用
CASE
语句仅获取更新。如果日期为今天,则状态为
:
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
或者,更好的是,如果您不需要更新
行中的任何其他内容,只需执行以下操作:
SELECT users.userId, updates.status
FROM users
LEFT JOIN updates ON users.userId=updates.userId
AND DATE(LastUpdated) = DATE(NOW())
将您的条件放在连接中,否则它将强制询问每个连接。或者,您可以检查LastUpdated
是否为NULL
(因为左侧连接将只包含定位信息)。试试这个
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
我想你想要的是左外连接,返回所有用户,而不仅仅是今天有更新的用户。应该是这样的:
SELECT users.userid, updates.lastupdated
FROM users
LEFT OUTER JOIN (
SELECT * FROM updates WHERE DATE(lastupdated) = DATE(NOW())
) updates ON users.userid = updates.userid
SELECT users.userid, updates.lastupdated
FROM users
LEFT OUTER JOIN (
SELECT * FROM updates WHERE DATE(lastupdated) = DATE(NOW())
) updates ON users.userid = updates.userid