处理以下查询的有效方法?在SQLServer或PostgreSql中自我加入

问题描述

我有一个如下的员工表

select * from employee

我需要选择employee_id,manager_id,结果。结果应为真还是假取决于以下条件。

  1. 如果员工是某人的经理,则为真
  2. 如果员工有经理,则为真

我提出了一个查询,但是我需要知道是否还有其他更好的方法可以执行此查询。 这是我的查询

with manager  as
(
select distinct manager_id from employee where manager_id is not null
)
select 
e.employee_id,e.manager_id,m.manager_id,case when e.manager_id is not null then true
     when m.manager_id is not null then true 
     else false
end as Result
from employee e left join manager m  on e.employee_id = m.manager_id 

结果应该是这样

enter image description here

解决方法

也许是这样的:

select
  e.employee_id,e.manager_id,(
    e.manager_id is not null
    or
    exists(select 1 from employee m where m.manager_id=e.employee_id)
  ) as result
from employee e;