【问题标题】:sql left join where railssql left join where rails
【发布时间】:2010-09-30 21:07:17
【问题描述】:

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

我想找到comment_views.viewed 为假的所有cmets。问题是,对于某些 cmets,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 中没有记录时,它不会返回 cmets。

【问题讨论】:

    标签: sql ruby-on-rails join find-by-sql


    【解决方案1】:

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

    where comment_views.viewed != "t" or comments_views.viewed is null
    

    【讨论】:

      【解决方案2】:

      几个cmets:

      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
      

      【讨论】:

      • group by 的原因确实不相关......我想我应该在这个例子中把它放在一边
      猜你喜欢
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 2017-01-31
      相关资源
      最近更新 更多