sql осталось присоединиться, где рельсы - PullRequest
1 голос
/ 01 октября 2010

Поскольку я использую рельсы, я стал ржавым на sql, так как редко использую его в рельсах.У меня есть две связанные таблицы: комментарии 1: m comment_views

Я хочу найти все комментарии, где 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 ]

2 голосов
/ 01 октября 2010

Вы можете проверить на ноль, если нет записи ...

where comment_views.viewed != "t" or comments_views.viewed is null
0 голосов
/ 01 октября 2010

Пара комментариев:

  1. Как только вы ссылаетесь на столбец из таблицы, к которой присоединяются слева (comment_views) в предложении 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
...