2014-01-09 3 views
0

Я не могу понять, почему этот запрос не работает. Он возвращает только 1 результат, но должен возвращать 21 результат. Всегда есть продукт для извлечения из базы данных, но не всегда обзор, чтобы пойти с ним.Left Outer Join возвращает только один результат

SELECT p.product_id, p.product_name, p.product_pic, AVG(r.review_stars) 
FROM products as p 
LEFT OUTER JOIN reviews as r ON p.product_id = r.review_product 
ORDER BY p.product_clicks DESC 
LIMIT 21 
+1

Вы должны развесить выборочные данные и структуру таблицы, демонстрирующая результат вы заявляете, что происходит, или еще лучше, создать sqlfiddle для SO сообщества использовать В качестве примера. –

+0

Да, avg не всегда имеет действительный результат, но я думал, что точка внешнего соединения была? – Katp00ps

+0

Вы добавили лимит 21 только для этого сообщения; в противном случае вы действительно должны удалить это. –

ответ

4

Это потому, что в отсутствие GROUP BY п совокупность функций всегда возвращение только строки.

Ваш запрос должен выглядеть примерно так

SELECT p.product_id, p.product_name, p.product_pic, AVG(r.review_stars) avg_stars 
    FROM products as p LEFT OUTER JOIN reviews as r 
    ON p.product_id = r.review_product 
GROUP BY p.product_id 
ORDER BY p.product_clicks DESC 
LIMIT 21 
+0

Хорошая точка! Я забыл об этом. –

+0

Вот и все! Большое спасибо. Сейчас работает безупречно. – Katp00ps