MySql Left Join не сохраняет Left Table - PullRequest
1 голос
/ 01 февраля 2012

Итак, у меня есть простая структура данных:

blog_entries

 id | category | title | body | desc| date

blog_comments

 id | entry_id | author | email | website | body | date

Iя пытаюсь присоединиться к blog_comments ON entry_id, чтобы получить COUNT для комментариев для каждой записи.У меня есть только две записи в «blog_entries» и ни одной в банкомате «blog_comments».По какой-то причине при выполнении запроса ниже я получаю только один результат:

SELECT
    blog_entries.*,
    COUNT(blog_comments.id) AS comment_count        
    FROM blog_entries
        LEFT JOIN blog_comments 
            ON blog_entries.id = blog_comments.entry_id

Я не понимаю, почему моя таблица LEFT не сохраняется.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Ваша левая таблица не сохраняется, потому что согласно: Группировка по функциям

Если вы используете функцию group в выражении, не содержащем предложения GROUP BY, это эквивалентно группировкена всех строках.

Вы должны использовать:

SELECT
    blog_entries.*, 
    COALESCE( c.cnt, 0 ) as comment_count
FROM blog_entries
LEFT JOIN 
  ( SELECT entry_id, COUNT(*) as cnt
    FROM blog_comments
    GROUP BY entry_id ) c
ON blog_entries.id = c.entry_id
0 голосов
/ 01 февраля 2012

Помимо «GROUP BY», как прокомментировал smp7d, я бы изменил его на count (*).если левое объединение пусто для комментариев, это вызывает у вас проблемы?

select 
      be.*,
      count(*)
   from
      blog_entries be
         left join blog_comments bc
           on be.id = bc.entry_id
   group by
     be.id
...