Почему этот запрос не выполняется?

0

Когда я запускаю этот запрос:

SELECT m.tag_id, m.product_id, count(m.product_id) as dups
FROM product_tag_map m
INNER JOIN category_tag_map s ON s.tag_id = m.tag_id
INNER JOIN cart_product p ON m.product_id = p.product_id
WHERE m.product_id = p.product_id
AND s.category_id =508
AND s.include =1
AND dups = (SELECT count(s.category_id) as cats FROM category_tag_map s WHERE s.category_id =508)
GROUP BY m.product_id
ORDER BY dups DESC

Я получаю эту ошибку:

1054 - Неизвестный столбец 'dups' в 'where clause'

Если я беру дупы из предложения where, я получаю следующее:

tag_id  product_id  dups
2   7038    2
2   1294    1

Я думаю, я не могу использовать поле dups в предложении where, потому что это поле создается на лету. Итак, как я могу сделать то, что я пытаюсь сделать тогда?

Теги:
mysql-error-1054

2 ответа

3
Лучший ответ

Когда вы фильтруете агрегат, вам нужно использовать Having. MySQL действительно позволяет вам ссылаться на псевдонимы столбцов в условии наличия (большинство других СУБД этого не позволяют)

SELECT m.tag_id, m.product_id, count(m.product_id) as dups
FROM product_tag_map m
INNER JOIN category_tag_map s ON s.tag_id = m.tag_id
INNER JOIN cart_product p ON m.product_id = p.product_id
WHERE m.product_id = p.product_id
AND s.category_id =508
AND s.include =1
GROUP BY m.product_id
HAVING dups = (SELECT count(s.category_id) as cats FROM category_tag_map s WHERE s.category_id =508)
ORDER BY dups DESC
  • 0
    Кажется, это работает! :)
1

dups - это просто псевдоним для результата count(). Я не уверен, что вы можете использовать count(m.product_id)=(SELECT ...) в предложении WHERE, если это я бы не сказал, что вы можете проверить его в предложении HAVING

Ещё вопросы

Сообщество Overcoder
Наверх
Меню