我有 3 个表:
- 用户
- 项目
用户组
每个用户可以将多个项目发布到项目表
- 每个用户在 user_groups 中都有一条记录,定义了他属于哪个用户组(例如新用户、初级用户、高级用户管理员等)
我正在尝试获取满足以下条件的用户 ID 列表:
- 属于用户组'3'
- 今天发布的项目少于 5 个
这是我的查询:
SELECT u.id, COUNT (i.id) as numPosted
FROM users u, items i
JOIN user_groups on user_groups.userId = u.id
AND user_groups.groupId = '5'
WHERE
i.userId = u.id AND
i.datePosted = CURDATE() AND
numPosted < 5
- 在 JOIN 中,确保用户属于用户组 5
- 并在其中检查项目是否属于 userId,以及今天发布的项目,以及发布的项目数量是否少于 5。
当我运行这个查询时,我得到这个错误:
#1630 - FUNCTION items.COUNT does not exist. Check the
'Function Name Parsing and Resolution' section in the Reference Manual
我做错了什么?
最佳答案
去掉COUNT
后面的空格,设置groupId = '3'
(假设groupId确实是文本),并添加一个HAVING
子句:
SELECT u.id, COUNT(i.id) as numPosted
FROM users u
JOIN user_groups g ON (g.userId = u.id AND g.groupId = '3')
LEFT OUTER JOIN items i ON (i.userId = u.id and i.datePosted = CURDATE())
GROUP BY u.id
HAVING COUNT(i.id) < 5
还有捕获未发帖用户的问题。直接加入,您将失去这些用户,那里需要外部加入。
关于MySQL Join Query 错误,我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12442970/