按子查询排序

Order by subquery

我有以下 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
           );

排序是根据其他 table 的结果进行的。在这种情况下,查询 returns 仅来自 employees table,但排序是由 department_name 完成的,它存储在 departments table 中.

您可以通过使用联接获得相同的结果,仅从 employees table 中选择值,并按 department_name 从部门 table:

中排序
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 加入。

该查询的明确意图是 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;