Справка по MySQL - PullRequest
       6

Справка по MySQL

0 голосов
/ 02 октября 2009

Мой запрос:

SELECT business.name, AVG(rating.value) as total  
FROM business   
INNER JOIN rating   
   ON business.id = rating.business_id   
INNER JOIN directory   
   ON business.id = directory.item_id  
WHERE directory.directory_id = 13    
   AND directory.type = 'business'   
   AND rating.rating_id = '1'   
GROUP BY business.id   
ORDER BY total DESC  

Моя проблема в том, что я хочу включить какие-либо компании, даже если у них нет связанных с ними рейтингов?

Ответы [ 5 ]

2 голосов
/ 02 октября 2009

Вам нужно использовать LEFT JOIN вместо INNER JOIN:

SELECT business.name, AVG(rating.value) as total  
FROM business   
INNER JOIN directory   
   ON business.id = directory.item_id  
LEFT JOIN rating   
   ON business.id = rating.business_id AND rating.rating_id = '1'
WHERE directory.directory_id = 13    
   AND directory.type = 'business'   
GROUP BY business.id   
ORDER BY total DESC

Если нет оценок, итоговое значение будет равно NULL. Вы можете справиться с этим в MySQL (если хотите) следующим образом:

IFNULL(AVG(rating.value), 'No ratings') as total 

Также обратите внимание, что вам необходимо перевести rating.rating_id = '1' в условия JOIN.

0 голосов
/ 02 октября 2009

изменить INNER JOIN на LEFT JOIN при присоединении бизнеса и рейтинги

0 голосов
/ 02 октября 2009

Делайте LEFT JOIN вместо вашего INNER JOIN при присоединении к rating -таблице.

0 голосов
/ 02 октября 2009

Вам просто нужно изменить ...

INNER JOIN rating  

до

LEFT JOIN rating  

INNER JOIN возвращает строку, в которой есть совпадение в обеих таблицах.

0 голосов
/ 02 октября 2009

Вы хотите сделать ВЛЕВО НАРУЖНОЕ СОЕДИНЕНИЕ .

SELECT business.name, AVG(rating.value) as total  
FROM business   
LEFT OUTER JOIN rating   
   ON business.id = rating.business_id   
INNER JOIN directory   
   ON business.id = directory.item_id  
WHERE directory.directory_id = 13    
   AND directory.type = 'business'   
   AND rating.rating_id = '1'   
GROUP BY business.id   
ORDER BY total DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...