我有以下oracle SQL代码,但我无法理解子查询的排序目的是什么。任何人都可以向我解释清楚吗?
SELECT employee_id, last_name
FROM employees e
ORDER BY (
SELECT department_name
FROM departments d
WHERE e.department_id = d.department_id
);
答案 0 :(得分:4)
排序由其他表的结果完成。在这种情况下,查询仅返回employees
表的结果,但排序由department_name
完成,departments
存储在employees
表中。
您可以通过使用连接,仅从department_name
表中选择值,并从部门表中按SELECT e.employee_id, e.last_name
FROM employees e INNER JOIN departments d
ON e.department_id = d.department_id
ORDER BY d.department_name
排序来获得相同的结果:
LEFT
如果员工必须始终拥有部门,则此查询有效。如果可能有没有部门的员工,那么您应该使用{{1}}加入。
答案 1 :(得分:1)
该查询的明确意图是employee_id,员工的last_name应该是来自各部门的department_name。
好的,你没有子查询然后去加入
select e.employee_id,e.last_name from employees e join departments d on
e.department_id = d.department_id order by d.department_name;