2 nevertao neverTao 于 2016.04.19 15:24 提问

mysql表关联只取关联表中最近一条数据

表A{id,userId,logTime}
表B{id,userId,departmentId,updateTime}

表A为数据记录
表B相当于历史记录表(userId在updateTime时间之前的departmentId)

现在表A与表B关联 但是只能让表B中符合条件的最近一记录关联上
(也是updateTime在logTime之前并且最近的一条)
我是这么做的
SELECT A.id,B.userId,B.departmentId FROM A INNER JOIN B
ON A.userId=B.userId AND A.logTime>B.updateTime
但是这样会将B表中多条符合条件的数据全取出来,而我只想要最近的一条就足够了
表A表B中都可能有多个userId与日期!!
求解

5个回答

neverTao
neverTao   2016.04.21 09:37
已采纳

还是自己答了吧!!
SELECT A.id,B.userId,B.departmentId FROM A INNER JOIN B
ON A.userId=B.userId AND B.id=(SELECT id FROM B ib WHERE A.logTime>=ib.updateTime ORDER BY ib.updateTime DESC LIMIT 1 )

xiaoai_911
xiaoai_911   2016.04.19 15:39

select b.id, b.userId, max(b.updateTime) from b
inner join a on a.userId = b.userId AND A.logTime>B.updateTime
group by b.userId

不知道你要的是不是这个样子的

neverTao
neverTao 回复羽雅子: 类似于这种吧 SELECT A.id,B.userId,B.departmentId FROM A INNER JOIN (SELECT * FROM B WHERE B.userId=A.userId AND A.logTime>B.updateTime ORDER BY B.updateTime desc limit 1) TMP ON A.userId=TMP.userId
一年多之前 回复
xiaoai_911
xiaoai_911 回复neverTao: 那我不懂你要的是什么样的数据了
一年多之前 回复
neverTao
neverTao 不是 这个只是b.updateTime是最近的,而其他的数据并不是
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.19 15:45

mysql---多表关联
MYSQL 关联表
两个MYSQL表关联查询
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

neverTao
neverTao 没找到我要的答案 - -#
一年多之前 回复
niaonao
niaonao   Rxr 2016.04.19 16:36

试试 limit
例如:
select * from use where uid>5 limit 1;
从表 use 中获取 uid 大于 5 的 1 条记录(该记录是紧挨着的)

niaonao
niaonao   Rxr 2016.04.19 16:37

SELECT A.id,B.userId,B.departmentId FROM A INNER JOIN B
ON A.userId=B.userId AND A.logTime>B.updateTime limit 1;

neverTao
neverTao 回复niaonao: 可以查到的 表A与表B关联 表A中有许多用户,表B应该将所有对应的用户信息都查出来。不用uid做限定条件,就是把所有的用户都查出来吧
一年多之前 回复
niaonao
niaonao 查当前用户的记录,你也不能查到其他用户那去啊。根据uid主键限定对当前用户(首先知道当前用户,然后获取当前用户的uid主键)进行查找记录
一年多之前 回复
neverTao
neverTao 如果表A中只有一个用户的话是没问题的,如果表A中有多个用户的话那不是把其他的用户也limit了!!
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!