SQL问题:INNER JOIN(SELF JOIN)消除重复的值

时间:2018-11-15 14:43:54

标签: sql sql-server

数据表 enter image description here

问题:按字母顺序列出所有主管的姓名。如果主管有多于一名员工,则其姓名应只出现一次。

我的输入和输出: enter image description here

预期输出: enter image description here

SQL的绝对初学者和stackoverflow的新手,将非常感谢您提供的帮助

3 个答案:

答案 0 :(得分:2)

您可以简单地做到:

select s.*
from staff s
where exists (select 1 from staff s2 where s.staffId = s2.supervisorid);

也就是说,选择所有主管。

答案 1 :(得分:0)

我认为您首先需要使用cte或temptable找出主管,然后使用它来选择名称,例如:

;with cte as ( --supervisors
   select distinct s1.Id
   from Staff s1
   inner join Staff s2 on s1.Id=s2.SupervisorId
)
select s.Name
from Staff s
inner join cte on s.Id = cte.Id
order by s.Name

答案 2 :(得分:0)

您可以尝试以下查询:

SELECT MAX(Staff.Name) As SupervisorName
FROM Staff INNER JOIN Staff Sup 
ON  Staff.SupervisorID = Sup.StaffID
GROUP BY Staff.Name
ORDER BY Staff.Name ASC