MySQL Join Query 错误,我做错了什么?

标签 mysql sql database join

我有 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/

相关文章:

database - 从 Intersystems Caché 数据库导出

mysql - SELECT INNER JOIN 只返回一个结果

sql - 改进此 SQL 查询的方法

mysql - 将 MongoDB Auth 代码迁移到 Mysql Node.Js

php - 开始日期和开始时间小于结束日期和结束时间验证

mysql用户登录

SQL查询添加包含空值的两列的值?

SQL Server : populate MAX(column) value with 0 for non existing rows

PHP BETWEEN 子句用法

mysql - MATCH AGAINST 不适用于两个 LEFT JOIN : #1210 - Incorrect arguments to MATCH