我希望能够这样做:
SELECT dept.id, (invoices.col1 + invoices.col2 + invoices.col3) as sumTotal
FROM dept
INNER JOIN invoices ON invoices.id_dept = dept.id
WHERE sumTotal > 10000
Run Code Online (Sandbox Code Playgroud)
但是我在使用"sumTotal"时得到了一个未知的专栏.
这可能吗?
Har*_*rev 16
用途HAVING:
SELECT dept.id, (invoices.col1 + invoices.col2 + invoices.col3) as sumTotal
FROM dept
INNER JOIN invoices
ON invoices.id_dept = dept.id
HAVING sumTotal > 10000
Run Code Online (Sandbox Code Playgroud)
问题是该WHERE子句在语句之前执行SELECT.因此该sumTotal列尚不可用.
该HAVING条款在声明后执行SELECT.在选择所有内容后,它会过滤掉结果.但请记住,因为使用HAVING速度较慢.它在整个行集上运行.
从MySQL文档:
几乎在最后一次应用HAVING子句,就在将项目发送到客户端之前,没有优化.(在HAVING之后应用LIMIT.)
SQL标准要求HAVING必须仅引用GROUP BY子句中的列或聚合函数中使用的列.但是,MySQL支持对此行为的扩展,并允许HAVING引用SELECT列表中的列和外部子查询中的列.
HAVING子句可以引用聚合函数,WHERE子句不能:
SELECT user, MAX(salary)
FROM users
GROUP BY user
HAVING MAX(salary) > 10;
Run Code Online (Sandbox Code Playgroud)
不要将HAVING用于应该在WHERE子句中的项目.
或者使用WHERE ......
SELECT dept.id, (invoices.col1 + invoices.col2 + invoices.col3) as sumTotal
FROM dept
JOIN invoices ON invoices.id_dept = dept.id
WHERE invoices.col1 + invoices.col2 + invoices.col3 > 10000
Run Code Online (Sandbox Code Playgroud)