2010-11-20 2 views
1

Я классические «получить все строки в одной таблице с числом соответствующих строк в другой таблице» вопрос, который необходимо решить с помощью этого запроса:Почему этот общий запрос возвращает одну строку меньше, чем нужно?

SELECT 
    ideas.id, 
    ideas.idea, 
    submitted, 
    COUNT(votes.id) AS vote_count 
FROM ideas 
LEFT OUTER JOIN votes ON ideas.id = votes.idea 
WHERE dead = 0 
GROUP BY votes.idea 
ORDER BY vote_count DESC, submitted DESC 
LIMIT 10; 

Есть 4 строки (с мёртвыми = 0) в идеях и одна строка в голосах (относящаяся к первой идее). Однако этот запрос возвращает две записи (идея №1 и идея № 2) с правильными параметрами vote_counts. Почему это не возвращает все записи в идеях?

ответ

3

Когда вы говорите GROUP BY votes.idea, вы просите одну строку результатов за значение идеи в голосах. Поскольку вы говорите, что голоса имеют только одну строку, в результате вы должны ожидать только две записи - одну, соответствующую значению идеи в этой строке голосов, а другую с NULL (сжимание трех строк без соответствующей записи голоса).

Возможно, вы имели в виду GROUP BY ideas.idea?

+0

Aha Я получаю это сейчас, спасибо! Это был долгий день... – Ross

1

Изменение:

GROUP BY votes.idea 

к:

GROUP BY ideas.id 

votes.idea Поскольку может быть NULL.

Смежные вопросы