如何解决查询中出现问题,以查找最近xx天未对任何帖子发表评论的用户
我一直在进行 MysqL 查询,以查找在过去10天内未对任何帖子发表任何评论的用户。 我在下面写了这样的东西。但是找不到预期的结果。
我有三个表Users,Posts,Comments。
SELECT * FROM users AS u
LEFT JOIN posts AS p ON u.userID = p.postID
LEFT JOIN comments AS c ON p.postID = c.postID
group by p.p.postID
having (max(t.addedDate) < DATE_SUB(Now(),INTERVAL 10 DAY));
此查询仍然返回过去10天发表评论的用户。不知道我在做什么错。如果有人可以在这里帮助我?
解决方法
存在逻辑似乎是您要求的最直译:
SELECT *
FROM users u
WHERE NOT EXISTS (SELECT 1 FROM posts p
INNER JOIN comments c ON p.postID = c.postID
WHERE p.userID = u.userID AND
c.addedDate >= DATE_SUB(NOW(),INTERVAL 10 DAY));
,
这是问题所在:
您要查找在过去10天内未针对任何帖子发布任何评论的用户。将users
与posts
和comments
一起加入,将为您创建了有评论的帖子的用户。任何进一步的过滤将应用于该错误子集。
假设您的comments
表中确实有一个userId
字段,这是如何解决的猜测。否则,请将您的架构添加到问题中。
select *
from users u
where u.id not in (
select c.userID
from comments c
where c.addedDate >= DATE_SUB(NOW(),INTERVAL 10 DAY)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。