为什么 having单独使用时,在select中必须有having查询中的字段,否则会报错。
比如简单的查询:
SELECT salary
FROM employees
HAVING salary > 10000;
这样是正常的
SELECT empid
FROM employees
HAVING salary > 10000;
这样就会错
sql执行的顺序不应该是 from on join where group by having select order by limt ...
select 在having后面执行,为什么必须要select后的字段
【以下回答由 GPT 生成】
在使用HAVING子句时,如果没有使用GROUP BY子句,后面必须紧跟SELECT子句中的字段的原因是因为HAVING子句用于对GROUP BY子句生成的分组进行过滤。它对每个分组进行条件判断,只保留符合条件的分组。
根据SQL语句的执行顺序,HAVING子句在SELECT之前执行,所以在HAVING子句中使用的条件表达式需要依赖于SELECT子句中的字段。在查询1中,由于SELECT子句中的字段就是salary,HAVING子句可以成功地对salary进行条件判断。
但在查询2中,SELECT子句中的字段是empid,而在HAVING子句中使用的条件是salary > 10000。这里没有明确指定使用哪个字段,因此会报错。如果想使用HAVING对empid进行条件判断,可以修改查询语句如下:
SELECT empid
FROM employees
WHERE salary > 10000;
这样即可实现对empid字段的过滤,而不需要使用HAVING子句。
所以,回答你的问题,当没有使用GROUP BY子句时,在HAVING子句中必须指定SELECT子句中的字段,是因为HAVING对分组进行条件判断,而条件表达式需要依赖于SELECT中的字段。