Mysql 左连接断开?

Mysql 左连接断开?,mysql,left-join,Mysql,Left Join,所以我有一个mysql查询,它过去可以正常工作,但现在我认为发生了一些事情,它似乎不再工作了 我想要加入的是两个表。" 使用者 及 日志 我想要“users”表中所有今天未登录的用户id(UID)的列表。因此我使用了此查询 SELECT users.UID FROM users LEFT JOIN logs ON users.UID = logs.UID AND DATE(logs.SCANTIME )=DATE(SYSDATE()) WHERE logs.UID is null

所以我有一个mysql查询,它过去可以正常工作,但现在我认为发生了一些事情,它似乎不再工作了

我想要加入的是两个表。"

使用者

日志

我想要“users”表中所有今天未登录的用户id(UID)的列表。因此我使用了此查询

SELECT users.UID 
FROM users 
LEFT JOIN logs 
  ON users.UID = logs.UID 
 AND DATE(logs.SCANTIME )=DATE(SYSDATE()) 
WHERE logs.UID is null
上面的查询过去可以工作,但现在返回一个不应该存在的UID列表

如果我今天查看日志,我可以看到多行,为了节省空间,我省略了除一行以外的所有行

 mysql> SELECT UID, SCANTIME FROM logs WHERE DATE(scantime)=DATE(SYSDATE());
    +------------+---------------------+
    | UID        | SCANTIME            |
    +------------+---------------------+
    .............
    | AA9B351B   | 2017-08-02 06:13:21 |
    .............
    +------------+---------------------+
    63 rows in set (0.00 sec)

所以这个家伙AA9B351B今天显然已经登录了。但是当我运行上面的查询时,他出现了。感谢您的回复,服务器时间可能已经不正确了,所以SYSDATE返回了错误的值。检查系统时间,并运行SQL查询,用SYSDATE函数替换为文本(仅用于测试)。与此检查相关,时区未更改。如果服务器时间错误,则重置。

服务器时间可能已不正确,因此SYSDATE返回的值错误。检查系统时间,并运行SQL查询,SYSDATE函数替换为文字(仅用于测试)。与此检查相关,时区未更改。如果服务器时间错误,则重置。

@Dhruv Saxena-LEFT JOIN将返回所有用户,但不会返回WHERE子句,然后过滤结果,以便只返回适用的用户。查询看起来很好。检查
sysdate()
考虑到客户端和服务器可能有不同的时间,并且可以在多个点和级别配置/覆盖时区,因此该值是正确的。除此之外,很少有服务器端配置会影响查询结果。我看到了两种可能性。1)时间(logs.scantime)不是返回您认为的“6:00”与“01:00”进行比较,并且比较是在字符串级别而不是“时间”级别“数据类型。2) 您可以在该用户的日志中创建多条记录。其中至少有一个是今天但在01:00之前和12:00之后。如果您的目标是只显示登录时间在01:00到12:00之间的用户,那么正如其他人所指出的,内部连接在这里更合适。你想干什么?查找今天在某个小时范围内未登录的所有用户?@Dhruv Saxena-LEFT JOIN将返回所有用户,但不会返回WHERE子句,然后筛选结果,以便只返回适用的用户。查询看起来很好。检查
sysdate()
值是正确的,因为客户端和服务器可能有不同的时间,并且可以在多个点和级别配置/覆盖时区。除此之外,很少有服务器端配置会影响查询结果。1) 时间(logs.scantime)不会返回您认为的“6:00”与“01:00”进行比较的结果,并且比较是在字符串级别,而不是“时间”数据类型。2) 您可以在该用户的日志中创建多条记录。其中至少有一个是今天但在01:00之前和12:00之后。如果您的目标是只显示登录时间在01:00到12:00之间的用户,那么正如其他人所指出的,内部连接在这里更合适。你想干什么?查找今天在某个小时范围内未登录的所有用户?