mysql 连表查询 只要多表中的最后一条记录
表1(用户表)idname01张三02李四表2(登录日志表)iduser_idlog_time1012014.3.12012014.3.23012014.3.3想要输出这...
表1(用户表)
id name
01 张三
02 李四
表2(登录日志表)
id user_id log_time
1 01 2014.3.1
2 01 2014.3.2
3 01 2014.3.3
想要输出这样一条记录
name log_time
张三 2014.3.3
就是说我只要登录日志表中的最后一次登录时间
我是这么写的 select a.name, b.log_time from 表1 as a, 表2 as b group by a.id
但是这条执行的结果只有输出第一次登录的时间,我要的结果要怎么写呢,注意不使用子查询,就使用连表查询
我想我表达错了,或没表达清楚,应该是这样
表2(评论表)
id user_id time content
1 01 2014.3.1 abcd1
2 01 2014.3.2 abcd2
3 02 2014.3.3 aaaa1
4 01 2014.3.3 abcd3
5 02 2014.3.3 aaaa2
6 02 2014.3.3 aaaa3
我要的这样一张表
name content
张三 abcd3
李四 aaaa3
我要的就是最后一条评论内容组成的一张新表,不用子查询 展开
id name
01 张三
02 李四
表2(登录日志表)
id user_id log_time
1 01 2014.3.1
2 01 2014.3.2
3 01 2014.3.3
想要输出这样一条记录
name log_time
张三 2014.3.3
就是说我只要登录日志表中的最后一次登录时间
我是这么写的 select a.name, b.log_time from 表1 as a, 表2 as b group by a.id
但是这条执行的结果只有输出第一次登录的时间,我要的结果要怎么写呢,注意不使用子查询,就使用连表查询
我想我表达错了,或没表达清楚,应该是这样
表2(评论表)
id user_id time content
1 01 2014.3.1 abcd1
2 01 2014.3.2 abcd2
3 02 2014.3.3 aaaa1
4 01 2014.3.3 abcd3
5 02 2014.3.3 aaaa2
6 02 2014.3.3 aaaa3
我要的这样一张表
name content
张三 abcd3
李四 aaaa3
我要的就是最后一条评论内容组成的一张新表,不用子查询 展开
展开全部
select a.name, max(b.log_time) from 表1 as a, 表2 as b
where a.id = b.user_id group by a.name
根据您最新的需求,SQL修改如下,保证查询效率没的说:
select
a.id,
a.name,
max(b.log_time),
(
select c.content
from 表2 as c where c.user_id = a.id
order by id desc limit 0,1
) as content
from 表1 as a, 表2 as b where a.id = b.user_id group by a.id, a.name
解释:因为您给出的log_time截止到日了,这意味着某天出现多条记录的话,这个日期就说明不了问题了,那我们不妨通过走id倒序的捷径,来取出最新的评论内容。
where a.id = b.user_id group by a.name
根据您最新的需求,SQL修改如下,保证查询效率没的说:
select
a.id,
a.name,
max(b.log_time),
(
select c.content
from 表2 as c where c.user_id = a.id
order by id desc limit 0,1
) as content
from 表1 as a, 表2 as b where a.id = b.user_id group by a.id, a.name
解释:因为您给出的log_time截止到日了,这意味着某天出现多条记录的话,这个日期就说明不了问题了,那我们不妨通过走id倒序的捷径,来取出最新的评论内容。
追问
使用一条子查询来读取content的数据,那如果我还要再读取表2中与content对应的其它字段,岂不是还要多几条子查询,有没不用子查询的方法呢
追答
我仅是按照您第二次贴出来的需要的表的样式给出的最效率的SQL。
如果您要除content外的表2其他字段,按照您的需求,我第二次提供的SQL是不合适的,且不使用子查询是不可能完成的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select a.name,b.log_time from 表1 as a, 表2 as b
where a.id = b.user_id order by b.log_time desc limit 1;
where a.id = b.user_id order by b.log_time desc limit 1;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询