【问题标题】:Why is this query failing?为什么这个查询失败?
【发布时间】:2010-09-28 13:39:31
【问题描述】:

当我运行这个查询时:

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 子句中取出 dups,我会得到:

tag_id  product_id  dups
2   7038    2
2   1294    1

我想我不能在 where 子句中使用 dups 字段,因为该字段是动态生成的。那么我该怎么做呢?

【问题讨论】:

    标签: mysql sql mysql-error-1054


    【解决方案1】:

    在过滤聚合时,您需要使用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
    

    【讨论】:

      【解决方案2】:

      dups 只是 count().. 结果的别名。我不确定您是否可以在 WHERE 子句中使用 count(m.product_id)=(SELECT ...),如果可以的话我不是说你可以在 HAVING 子句中测试它

      【讨论】:

        猜你喜欢
        • 2011-09-01
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        • 2021-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多