0

所以我被困在这个问题上,它说:

编写一个查询以按字母顺序检索所有部门的列表,其中包含列 DEPARTMENT_ID 、 DEPARTMENT_NAME 、 LAST_NAME 、 FIRST_NAME 其中 last_name 和 first_name 是部门经理的名称,只要有一个。

我有使用部门的人力资源数据库,员工表我到目前为止写的是:

select department_id, department_name, e.last_name, e.first_name
from departments d, employees e
where e.department_id=d.department_id
and d.department_id=e.department_id
and d.manager_id=e.manager_id
having department_name = '%Manager%';

但我无法弄清楚,任何提示都会有所帮助,谢谢!

4

2 回答 2

1

have 子句与 group by 相关。如果你没有分组依据,那么有子句就没有意义。

您只需要加入即可在员工表中为经理获取记录。

select department_id, department_name, e.last_name, e.first_name
from departments d, employees e
where d.manager_id=e.id

更好的是使用较新的连接语法,

select dept.department_id, dept.department_name, emp.last_name, emp.first_name
from departments dept
  inner join employees emp on dept.manager_id = emp.id

您不需要 e.department_id=d.department_id 和 d.department_id=e.department_id 的条件,(一方面这些是多余的,因此如果需要,您只需要一个),因为 employees.department_id 字段是指员工所在的部门,您想要的是该部门的经理员工记录。部门的经理员工记录表示为员工表主键的外键。

于 2013-03-10T21:01:55.173 回答
0

这可能会帮助你...

`select e.first_name,e.last_name,d.department_id ,d.department_name from employees e,departmets d where d.manager_id=e.employee_id order by d.department_name;`
于 2013-03-12T06:32:19.253 回答