mysql左联查询时,右表有多条关联左表同一记录的信息,只要有右表中有条件不符合,就不显示该所有左表记录 100
表1,用户表user表2,用户记录表from_idSELECT*from`user``u`LEFTJOIN`form_id``f`ONu.id=f.user_idWHER...
表1,用户表 user
表2,用户记录表 from_id
SELECT * from `user` `u` LEFT JOIN `form_id` `f` ON u.id = f.user_id
WHERE (`f`.`addtime` >= 6天前的时间) AND (`f`.`addtime` <= 3天前的时间)
ORDER BY `f`.`addtime` DESC LIMIT 20;
需求是筛选出前3天没有记录的用户,这个如何实现?
上面这个我实现的筛选出(前6~3天)的最后一次时间的用户记录。
但是如果用户记录表有( 最近3天内)的记录,也是会把(前6~3天)的记录给查询出来。
正常查询是会把符合条件的都查询示出来。
那或者说如何在条件2(最近3天内)符合的情况下,把条件1(前6~3天)符合的都去除呢? 展开
表2,用户记录表 from_id
SELECT * from `user` `u` LEFT JOIN `form_id` `f` ON u.id = f.user_id
WHERE (`f`.`addtime` >= 6天前的时间) AND (`f`.`addtime` <= 3天前的时间)
ORDER BY `f`.`addtime` DESC LIMIT 20;
需求是筛选出前3天没有记录的用户,这个如何实现?
上面这个我实现的筛选出(前6~3天)的最后一次时间的用户记录。
但是如果用户记录表有( 最近3天内)的记录,也是会把(前6~3天)的记录给查询出来。
正常查询是会把符合条件的都查询示出来。
那或者说如何在条件2(最近3天内)符合的情况下,把条件1(前6~3天)符合的都去除呢? 展开
展开全部
SELECT * from `user` `u` LEFT JOIN `form_id` `f` ON u.id = f.user_id
WHERE (`f`.`addtime` >= 6天前的时间) AND (`f`.`addtime` <= 3天前的时间)
AND u.id IS NULL
ORDER BY `f`.`addtime` DESC LIMIT 20;
或者
SELECT * FROM `form_id` `f`
WHERE (`f`.`addtime` >= 6天前的时间) AND (`f`.`addtime` <= 3天前的时间) -- 前三天的记录
AND NOT EXISTS (SELECT 1 FROM user` `u` WHERE u.id = f.user_id) -- 没有在用户表里的人
ORDER BY `f`.`addtime`
WHERE (`f`.`addtime` >= 6天前的时间) AND (`f`.`addtime` <= 3天前的时间)
AND u.id IS NULL
ORDER BY `f`.`addtime` DESC LIMIT 20;
或者
SELECT * FROM `form_id` `f`
WHERE (`f`.`addtime` >= 6天前的时间) AND (`f`.`addtime` <= 3天前的时间) -- 前三天的记录
AND NOT EXISTS (SELECT 1 FROM user` `u` WHERE u.id = f.user_id) -- 没有在用户表里的人
ORDER BY `f`.`addtime`
追问
返回都是空的
追答
第一个换成f.id is null试下,原则上左连接一般是左表是大表然后关联小表取左表是空的记录查出来就是没在右表的数据,我这里测试不了你再试下
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询