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 - 'where 句' の列 'dups' が不明です

where句から重複を取り除くと、次のようになります。

tag_id  product_id  dups
2   7038    2
2   1294    1

そのフィールドはその場で生成されているため、where句でdupsフィールドを使用できないと思います。では、私がやろうとしていることをどのように行うことができますか?

4

2 に答える 2

3

集計をフィルタリングしているため、使用する必要がありますHaving。MySQL では実際には、having 句で列のエイリアスを参照できます (他のほとんどの RDBMS ではこれが許可されていません)。

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
于 2010-09-28T13:44:07.217 に答える
1

dupsは .. の結果の単なるエイリアスです。WHEREcount()で使用できるかどうかはわかりません。使用できない場合は、 HAVING句でテストできると思いますcount(m.product_id)=(SELECT ...)

于 2010-09-28T13:45:11.957 に答える