代码之家  ›  专栏  ›  技术社区  ›  tybro0103

SQL左联接Where Rails

  •  1
  • tybro0103  · 技术社区  · 14 年前

    因为我使用Rails,所以我在SQL上已经生锈了,因为我很少在Rails中使用它。 我有两个相关的表: 评论1:m评论

    我要查找所有评论,其中comment_views.viewed为false。问题是,对于某些评论,评论视图中还没有相关记录。

    到目前为止,我有

    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
    

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   cjk    14 年前

    如果没有记录,可以检查是否为空…

    where comment_views.viewed != "t" or comments_views.viewed is null
    
        2
  •  0
  •   Joe Stefanelli    14 年前

    一些评论:

    1. 只要在WHERE子句中引用左联接表(注释视图)中的列,就强制联接充当内部联接。将这些条件改为联接。

    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