左联查询时,右表有多条关联左表同一记录的信息,只要有右表中有条件不符合,就不显示该所有左表记录

baiyi233 2019-10-13 10:45:46
表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天)符合的都去除呢?
...全文
1585 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
baiyi233 2019-10-16
  • 打赏
  • 举报
回复
引用 2 楼 cquzxs 的回复:
需求:筛选出前3天没有记录的用户

SELECT
	* 
FROM
	USER u 
WHERE
	u.id != ANY ( SELECT DISTINCT f.user_id FROM form_id f WHERE f.addtime >= DATE_SUB( CURDATE( ), INTERVAL 3 DAY ) )
谢谢,不过你这个只能取到用户的字段,而且需求是前6天内得有数据的(这个是我没表达清楚)
baiyi233 2019-10-16
  • 打赏
  • 举报
回复
我自己已经解决了,就是看上去有点复杂,不知道性能会不会差,因为form_id 这个表是操作记录表所以数据会比较多。 麻烦大家帮我看一下哈 整体需求就是获取6天内有记录,但是前3天没有记录的用户。 下面是代码,简化了一些不必要的条件。

SELECT 
`u`.`id`, `f`.`addtime` AS `f_addtime` 
FROM `user` `u` LEFT JOIN `form_id` `f` ON f.user_id = u.id and f.type = 'form_id' and 
NOT EXISTS(SELECT 1 FROM form_id ff 
                    WHERE ff.user_id = f.user_id AND ff.type = 'form_id' AND ff.addtime >= 3天前的时间戳) 
WHERE `f`.`type`='form_id' AND `f`.`addtime` >= 6天前的时间戳 AND `f`.`addtime` <= 3天前的时间戳
ORDER BY `f`.`addtime` DESC LIMIT 20
cquzxs 2019-10-14
  • 打赏
  • 举报
回复
需求:筛选出前3天没有记录的用户

SELECT
	* 
FROM
	USER u 
WHERE
	u.id != ANY ( SELECT DISTINCT f.user_id FROM form_id f WHERE f.addtime >= DATE_SUB( CURDATE( ), INTERVAL 3 DAY ) )
AHUA1001 2019-10-14
  • 打赏
  • 举报
回复
能再说的详细点吗,最好把查询结果,和你想要的查询结果发出来。

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧