mysql LEFT соединение для максимального значения правой таблицы - PullRequest
5 голосов
/ 07 июня 2011

Я хочу выбрать каждую фотографию только с одним комментарием и хочу, чтобы этот комментарий был с максимальным идентификатором

Я пробовал следующее:

SELECT
    p.id,
    p.title,
    MAX(c.id),
    c.comment
FROM tb_photos AS p
    LEFT JOIN tb_comments AS c ON p.id=c.photos_id.

Кажется, это работает, но мне интересно, есть ли лучший способ сделать это?

Ответы [ 2 ]

5 голосов
/ 07 июня 2011

вам нужно применить максимальный (идентификатор комментария) к каждой фотографии (при условии, что идентификатор комментария является автоинкрементным и, следовательно, всегда самым последним добавленным в таблицу)

select
      p.*,
      tbc.Comment
   from
      tb_photos p
         LEFT JOIN ( select c.photos_id, 
                            max( c.id ) lastCommentPerPhoto
                        from
                           tb_comments c
                        group by
                           c.photos_id
                        order by
                           c.Photos_id ) LastPhotoComment
            on p.id = LastPhotoComment.photos_id
            LEFT JOIN tb_comments tbc
               on LastPhotoComment.LastCommentPerPhoto = tbc.id
0 голосов
/ 24 июля 2012

Вы также можете сделать это с помощью перекрестного соединения:

select
      p.*,
      LastPhotoComment.Comment
   from
      tb_photos p
         cross join ( select top 1 c.Comment
                        from
                           tb_comments c
                        where
                           c.photos_id = p.id
                        order by
                           c.id DESC ) LastPhotoComment
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...