假设我有一个帖子表,其中有很多评论(评论属于用户)。
如何显示特定用户未评论过的所有帖子?
假装我的数据库中有一个ID为124的用户;
select * from posts p left join comments c on p.id = c.post_id
where c.id is null or c.user_id <> 124
但这似乎不对..如果帖子没有评论怎么办?
答案 0 :(得分:1)
您应该检查表user_id
中的post
而不是表comments
,因为有些user_id
表上还没有任何记录{{ 1}}。
comments
答案 1 :(得分:0)
select * from posts p left join comments c
on p.id = c.post_id
where c.post_id is null and p.user_id = 124;
编辑:
请试试这个:
select * from posts p
where p.pid not in ( select c.pid
from comments c
where c.uid = 111)
;
| PID | PNAME |
---------------
| 3 | p3 |
答案 2 :(得分:0)
使用null作为你的问题的id是不好的做法我会使用类似这样的东西
select * from post p1 where not exists
(select 1 from comment c1 where c1.post_id = p1.id)
union
select * from post p2 where exists
(select 1 from comment c1 where c1.post_id = p1.id and c2.user_id <> 124)