Mysql 即使一行为空,也可以获取数据

Mysql 即使一行为空,也可以获取数据,mysql,sql,Mysql,Sql,我使用此查询可以从users表中获取用户,还可以从logs表中获取最新的time(时间戳),其中条目为“login\u ok”。这是为了显示用户列表以及他们上次登录的时间 SELECT u.`id`, u.`email`, u.`firstname`, u.`lastname`, u.`type`, u.`creation_date`, MAX(l.`time`) as `last_login` FROM `users` AS u JOIN `logs` AS l ON u.id = l.use

我使用此查询可以从
users
表中获取用户,还可以从
logs
表中获取最新的
time
(时间戳),其中条目为“login\u ok”。这是为了显示用户列表以及他们上次登录的时间

SELECT u.`id`, u.`email`, u.`firstname`, u.`lastname`, u.`type`, u.`creation_date`, MAX(l.`time`) as `last_login`
FROM `users` AS u
JOIN `logs` AS l ON u.id = l.user_id
WHERE l.`action` = 'login_ok'
AND `visible` = 1
GROUP BY u.`id`
ORDER BY u.`id` ASC
我这里的问题是:如果用户从未登录,则该用户的“login\u ok”条目不存在,因此查询无法获取该用户数据


即使
日志
上的
l.time
不存在,是否有办法获取所有用户数据?我尝试了
JOIN
name\u admin\u users\u log
作为l ON(l.
time
不为NULL,u.id=l.user\u id)
,但仍然没有显示没有登录日志的新用户。

您可以简单地忽略
login\u ok
并搜索
l.action
的所有值

但是,如果您只需要具有
login\u ok
null
的值,则可以执行以下操作:

WHERE l.`action` = 'login_ok' OR l.`action` is null 

使用
左连接

SELECT u.`id`, u.`email`, u.`firstname`, u.`lastname`, u.`type`, u.`creation_date`, MAX(l.`time`) as `last_login`
FROM `users` u LEFT JOIN
     `logs` l
     ON u.id = l.user_id AND l.`action` = 'login_ok'
WHERE u.`visible` = 1
GROUP BY u.`id`
ORDER BY u.`id` ASC;

这假设
可见
位于
用户
中。如果它在
日志中,那么该条件也应该在
ON
子句中。

使用
左连接
而不是常规的
连接
(这实际上意味着
内部连接
),并将
操作上的筛选器='login\u ok'
移动到该
左连接
子句中

注意:从您的查询中,我们无法判断
可见列来自哪个表,因此我假设它与
用户相关

SELECT
    u.id, 
    u.email,
    u.firstname,
    u.lastname,
    u.type,
    u.creation_date,
    MAX(l.time) as last_login
FROM users AS u
LEFT JOIN logs AS l
    ON u.id = l.user_id and l.action = 'login_ok' 
WHERE u.visible = 1
GROUP BY u.id
ORDER BY u.id ASC

应该使用左/右连接而不是连接(内部) 例如:

SELECT u.id, u.name, l.time
FROM users u LEFT JOIN logs l
  ON u.id=l.user_id
在这种情况下,您将从“用户”(select:users-left,logs-right中左侧的表)获取所有记录,并从右侧(“logs”)表获取所有记录,条件u.id=l.user\u id为true

最后,您将得到如下结果:

u.id   u.name   l.time
 1      John    10.00am
 2      Mary    2.15pm
 3      Mark    null

使用case语句,如用户登录时选择case,然后…否则,用户注销时选择case…感谢您对加入的解释!这就像一个符咒:)谢谢。欢迎@JimmyAdaro!很乐意帮忙