【发布时间】:2022-07-11 21:58:56
【问题描述】:
select d.department_id, d.department_name, sum(e.salary) from employees e, departments d
having e.department_id = d.department_id group by d.department_id;
select sum(SALARY) SUMA_SALARIILOR, department_name
from departments join employees on departments.department_id = employees.department_id
group by department_name;
我尝试打印每个部门的所有工资总和,在第二种情况下,它可以使用“join”但不使用子查询。 你能帮我解释一下吗?
【问题讨论】:
-
您在任何一个示例中都没有使用子查询,第一个示例只是隐式连接的示例。
departments和employees表中的主键是什么?您应该包含表的架构(对这些表使用SHOW CREATE TABLE以获得正确的语句) -
您的第一个也使用了连接,尽管它是一个不正确的隐式内部连接。将
having e.department_id = d.department_id更改为where e.department_id = d.department_id并重新运行。还...实际上不要使用该代码,因为隐式内部连接语法在几十年前就已经过时了。您的第二个查询写得更好(尽管除了 5.7 之前的 MySQL 版本之外,几乎所有 RDBMS 都会引发错误,但这是一个单独的主题)。
标签: mysql join group-by subquery oracle-sqldeveloper