ID为空白的关联表的mySQL查询

时间:2013-01-23 07:10:11

标签: mysql sql select join

假设我有一个帖子表,其中有很多评论(评论属于用户)。

如何显示特定用户未评论过的所有帖子?

假装我的数据库中有一个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

但这似乎不对..如果帖子没有评论怎么办?

3 个答案:

答案 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;

编辑:

请试试这个:

SQLFIDDLE DEMO

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)