MySQL实用sql语句之连表查询用户基本信息及用户最近一条登录信息
背景及需求:
项目现有两张表:一张用户表,表名:users;一张用户登录信息表,表名:user_login_log表。需求是:查询用户的基本信息及用户最近一条登录信息的列表数据。
数据表结构:
users表结构:
CREATE TABLE `users` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增无符号主键', `username` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名', `created_at` datetime NOT NULL COMMENT '创建时间', `updated_at` datetime NOT NULL COMMENT '最近一次更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户数据表';
users表数据:
user_login_log表结构:
CREATE TABLE `user_login_log` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增无符号主键', `user_id` bigint(20) unsigned NOT NULL COMMENT '用户ID', `login_ip` varchar(50) NOT NULL DEFAULT '' COMMENT '登录IP', `created_at` datetime NOT NULL COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户登录数据表';
user_login_log表数据:
连表查询用户基本信息及用户最近一条登录信息:
-- 1条sql语句连表查询用户基本信息及用户最近一条登录信息 select a.id, a.username, a.created_at, a.updated_at, b.login_ip from users as a left join ( select d.user_id, d.login_ip from ( select max(id) as id from user_login_log group by user_id ) as c left join user_login_log as d on d.id = c.id ) as b on b.user_id = a.id order by a.id desc;
查询结果: