Почему этот запрос не выполняется? - PullRequest
0 голосов
/ 28 сентября 2010

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

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»

Если я возьму дупс из пункта, где я получу это:

tag_id  product_id  dups
2   7038    2
2   1294    1

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

Ответы [ 2 ]

3 голосов
/ 28 сентября 2010

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

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
1 голос
/ 28 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...