Mysql SQL错误:表示计数中的列不存在
我得到这个错误:Mysql SQL错误:表示计数中的列不存在,mysql,sql,count,Mysql,Sql,Count,我得到这个错误: SELECT c.review, m.category, u.username, i.item, i.item_id, m.cat_id, COUNT(rv.review_id) totalCount FROM reviews AS c LEFT JOIN review_vote as rv ON c.review_id = rv.review_id LEFT JOIN users AS u ON u.user_id = c.user_id LEFT JOIN i
SELECT c.review, m.category, u.username, i.item, i.item_id, m.cat_id, COUNT(rv.review_id) totalCount
FROM reviews AS c
LEFT JOIN review_vote as rv
ON c.review_id = rv.review_id
LEFT JOIN users AS u
ON u.user_id = c.user_id
LEFT JOIN items AS i
ON i.item_id = c.item_id
LEFT JOIN master_cat AS m
ON m.cat_id = i.cat_id
WHERE LENGTH(c.review) > 50 AND m.category = 'Movies' AND totalCount > 2
GROUP BY rv.review_id
ORDER BY RAND()
LIMIT 1
我现在就选择这个专栏,为什么它不存在
我试图随机选择一个在表rv
中列出(或投票2次或以上)的评论。此外,我不确定是否正确使用了聚合列(如count()
)的groupby
子句,您必须使用HAVING
子句对其设置条件:
#1054 - Unknown column 'totalCount' in 'where clause'
某些数据库(包括mysql)允许您使用列别名,例如HAVING totalCount>2
,但使用表达式适用于所有数据库。ie for mysql(至少),您可以将其编码为:
SELECT c.review, m.category, u.username, i.item, i.item_id, m.cat_id, COUNT(rv.review_id) totalCount
FROM reviews AS c
LEFT JOIN review_vote as rv
ON c.review_id = rv.review_id
LEFT JOIN users AS u
ON u.user_id = c.user_id
LEFT JOIN items AS i
ON i.item_id = c.item_id
LEFT JOIN master_cat AS m
ON m.cat_id = i.cat_id
WHERE LENGTH(c.review) > 50 AND m.category = 'Movies'
GROUP BY rv.review_id
HAVING COUNT(rv.review_id) > 2 -- Added this line!
ORDER BY RAND()
LIMIT 1
但它不能移植到所有其他数据库。对于聚合列(如count()
),必须使用HAVING
子句对其设置条件:
#1054 - Unknown column 'totalCount' in 'where clause'
某些数据库(包括mysql)允许您使用列别名,例如HAVING totalCount>2
,但使用表达式适用于所有数据库。ie for mysql(至少),您可以将其编码为:
SELECT c.review, m.category, u.username, i.item, i.item_id, m.cat_id, COUNT(rv.review_id) totalCount
FROM reviews AS c
LEFT JOIN review_vote as rv
ON c.review_id = rv.review_id
LEFT JOIN users AS u
ON u.user_id = c.user_id
LEFT JOIN items AS i
ON i.item_id = c.item_id
LEFT JOIN master_cat AS m
ON m.cat_id = i.cat_id
WHERE LENGTH(c.review) > 50 AND m.category = 'Movies'
GROUP BY rv.review_id
HAVING COUNT(rv.review_id) > 2 -- Added this line!
ORDER BY RAND()
LIMIT 1
但是它不能移植到所有其他数据库。此时不能在
WHERE
子句中使用别名totalCount
,因为尚未对聚合进行分组和评估。相反,使用HAVING totalCount>2
我要补充的是,如果您没有将SELECT
列表中的所有列都包含在groupby
中,那么在MySQL中使用聚合时应该谨慎。大多数其他RDBMS不允许这样做,结果有时是不确定的。此时不能在WHERE
子句中使用别名totalCount
,因为尚未对聚合进行分组和评估。相反,使用HAVING totalCount>2
我要补充的是,如果您没有将SELECT
列表中的所有列都包含在groupby
中,那么在MySQL中使用聚合时应该谨慎。大多数其他RDBMS不允许这样做,结果有时是不确定的。这正是我所需要的。谢谢这正是我所需要的。谢谢