我在以下查询中收到错误,即使我的一切似乎都很好:
SELECT
user.*
FROM
user
INNER JOIN
role ON role.id = user.role_id
LEFT OUTER JOIN
user_documents ON user.id = user_documents.user_id
WHERE
user.id = 1
GROUP BY
user.id
HAVING
count(user_documents.user_id) < role.max_allowed_documents
我得到的错误是Unknown column 'role.max_allowed_documents' in 'having clause'
,但我检查了三次,该列存在于我的角色表中。有什么想法吗?
基本上我将用户分配给角色。每个用户可以在角色表中通过max_allowed_documents
定义许多文档,这是一个整数,此查询会尝试选择仍然允许拥有文档的所有用户(未达到其限制)。
答案 0 :(得分:5)
http://dev.mysql.com/doc/refman/5.5/en/select.html
SQL标准要求HAVING必须仅引用列中的列 GROUP BY子句或聚合函数中使用的列。然而, MySQL支持对此行为的扩展,允许HAVING 引用SELECT列表中的列和外部子查询中的列 好。
以下代码应该没问题:
SELECT
user.*, role.max_allowed_documents
FROM
user
INNER JOIN
role ON role.id = user.role_id
LEFT OUTER JOIN
user_documents ON user.id = user_documents.user_id
WHERE
user.id = 1
GROUP BY
user.id
HAVING
count(user_documents.user_id) < role.max_allowed_documents
答案 1 :(得分:0)
SELECT
user.*
FROM
user
JOIN role
ON user.role_id = role.id
LEFT JOIN
( select ud.user_id, count(*) as DocCount
from user_documents ud
group by ud.user_id ) PreCounted
on user.id = PreCounted.user_id
WHERE
COALESCE( PreCounted.DocCount, 0 ) < role.max_allowed_documents