我创建一个查询,选择两个表并通过计算一个表中的字段来创建一个总变量。 例如:
Table A:
ID | email
1 | test@test
2 | test2@test
3 | test3@test
表B
ID | email_id | username_id
1 | 1 | 11
2 | 1 | 22
3 | 2 | 33
我的查询:
select a.id, a.email, count(c.id) as total
from tableA a
left join tableC c on c.email_id = a.id AND total <= 5
group by a.email LIMIT 1
输出:
Unknown column 'total' in 'on clause
我需要选择总数<= 5的第一个“a.id”。我该怎么做?
答案 0 :(得分:1)
逻辑Select
在Where
子句之后处理,因此您不能在同一Where
子句中使用别名。
使用HAVING
子句
select a.id, a.email, count(c.id) as total
from tableA a
left join tableC c on c.email_id = a.id
group by a.email
Having count(c.id) <= 5
LIMIT 1
我认为Mysql
允许你这样做
Having total <= 5
答案 1 :(得分:0)
尝试HAVING Count(c.id)&lt; = 5
答案 2 :(得分:0)
只是为了使这一点更清楚,因为已经提供了正确的答案 - 您不必使用HAVING
子句,HAVING
子句并不总是解决此问题问题
HAVING
子句通常用于在聚合列上放置过滤器(sum,count,max,min等等),但是当您有一个计算列(例如colA + colB as calc_column
)时,则另一种方法,也应该在这里工作,用另一个选择包装查询,然后新的列将在WHERE
上可用:
SELECT *
FROM (The query here ) s
WHERE s.total <= 5