Использовать объединенное значение в предложении where - PullRequest
1 голос
/ 09 августа 2011

Я хочу использовать оператор where для значения из объединенной таблицы. Не могу понять:

SELECT item.*, count(articles.authorid) AS articlecount 
FROM #_authors AS item 
LEFT JOIN #_articles AS articles ON (articles.authorid = item.id) 
WHERE item.published=1 
AND articlecount>3 
ORDER BY articlecount DESC

Порядок работает нормально, но когда я добавляю «И articlecount> 3», я получаю сообщение об ошибке: «# 1054 - Неизвестный столбец« articlecount »в« предложении where »».

Как лучше всего включить WHERE в articlecount? Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 09 августа 2011

Для агрегированных столбцов вы используете HAVING, например:

SELECT item.*, count(articles.authorid) AS articlecount 
FROM #_authors AS item 
LEFT JOIN #_articles AS articles ON (articles.authorid = item.id) 
WHERE item.published=1 
GROUP BY 1,2,3,4,5,6,7,8 -- assuming there are 8 columns in item
HAVING count(articles.authorid) > 3 
ORDER BY 9 DESC -- assuming there are 8 columns in item
1 голос
/ 09 августа 2011
 SELECT item.*, count(articles.authorid) AS articlecount 
    FROM #_authors AS item 
    LEFT JOIN #_articles AS articles ON (articles.authorid = item.id) 
    WHERE item.published=1 
    AND articlecount>3 
    ORDER BY articlecount DESC


articlecount refers to which table field?
if articlecount  is in #_author table then you have to write item.articlecount 

or articles.articlecount
0 голосов
/ 09 августа 2011

Попробуйте использовать HAVING для фильтрации по агрегированному valeus:

WHERE item.published=1
HAVING count(articles.authorid) > 3
ORDER BY articlecount DESC 
...