1

因为我使用rails,所以我对sql已经生疏了,因为我很少在rails中使用它。我有两个相关的表:comments 1:m comment_views

我想找到所有 comment_views.viewed 为假的评论。问题是,对于某些评论,comment_views 中还没有相关记录。

到目前为止我有

select comments.id 
    from comments 
        left join comment_views 
            on comments.id = comment_views.comment_id 
    where comment_views.viewed != "t" 
    group by type_id, object_id 
    order by comments.created_at desc

但如前所述,当comment_views 中没有记录时,它不会返回评论。

4

2 回答 2

2

如果没有记录,您可以检查 null ......

where comment_views.viewed != "t" or comments_views.viewed is null
于 2010-09-30T21:10:53.747 回答
0

一些评论:

  1. 一旦您在 where 子句中引用左连接表 (comment_views) 中的列,您就会强制连接像内部连接一样运行。而是将这些条件放在联接上。

  2. 不知道你为什么要分组。我认为不需要。

所以,代码应该是:

select comments.id 
    from comments 
        left join comment_views 
            on comments.id = comment_views.comment_id 
                and comment_views.viewed != "t"
    order by comments.created_at desc
于 2010-09-30T21:12:42.227 回答