首页 > 解决方案 > 我们如何在 SELECT 子句中使用子查询重写查询?

问题描述

您将如何尽可能将以下查询重写为一个没有子查询的查询?

Select dept name,
                 (Select Count(*)
                    From instructor
                   Where department.dept name = instructor.dept name
                 ) As num_instructors
 From department;

我想出了以下内容。它与上述等效吗?

   Select dept name, count(*)
     From department, instructor
    Where department.dept name = instructor.dept name
 Group By department.dept_name;

谢谢。

标签: sqlpostgresql

解决方案


编写查询的正确方法使用显式JOIN语法:

select d.dept_name, count(i.dept_name)
from department d left join
     instructor i
     on d.dept_name = i.dept_name
group by d.dept_name;

如果您只关心至少有一名讲师的部门,那么根本join不需要:

select i.dept_name, count(*)
from instructor i
group by i.dept_name;

推荐阅读