问题描述
我一直在进行 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)
)