2016-10-03 88 views
0

我有这样的SQL数据库,其中有员工和主管分配给他们。对于没有男性员工的主管,我需要找到SSN和为其工作的员工总数。SQL查询:员工数据库

这是我在数据库表的外观:enter image description here

这里是我的解决方案代码:

SELECT supervisors.ssn, COUNT(e.ssn) 
FROM employee AS supervisors, employee AS e 
WHERE e.ssn NOT IN (SELECT e.ssn FROM employee e WHERE e.sex = 'M') AND supervisors.ssn = e.superssn 
GROUP BY supervisors.ssn; 

但上面的代码中发现谁拥有至少一名女员工监事。但是,我需要找到只有的主管女员工。

+0

MySQL或SQL服务器?它们不是同一件事。很确定从语法上来说这是sql服务器。你也应该使用显式连接。近30年来,它们已成为标准的一部分。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx –

+0

http://meta.stackoverflow.com/questions/ 285551/why-may-i-not-upload-images-code-on-so-when-asked-a-question/285557#285557 –

+0

你正在使用哪些DBMS? –

回答

1

许多答案都将排除的结果,如果主管是男性

这不会

SELECT employee.lname, count(employee.lname) as NumberOfEmployees 
FROM Employee 
INNER JOIN (

SELECT Employee.SuperSSN 
FROM Employee 
WHERE Employee.SuperSSN NOT IN 
(SELECT Employee.SuperSSN FROM Employee e 
INNER JOIN Employee 
ON e.SSN = Employee.SuperSSN 
WHERE Employee.SEX = 'M') 
) 
AS e 
ON Employee.ssn = e.superssn 
GROUP BY employee.lname 
+0

谢谢!会很好,如果你解释你的答案,请 –

+0

按部分:最内部查询:'SELECT Employee.SuperSSN FROM Employee e INNER JOIN Employee ON e.SSN = Employee.SuperSSN WHERE Employee.SEX ='M'' This返回至少有1名男性为他们工作的主管。总内部查询'SELECT Employee.SuperSSN FROM Employee WHERE Employee.SuperSSN NOT IN (SELECT Employee.SuperSSN ....'返回超级雇员监督员的superSSN,监督员没有任何男性工人。必须加入到整个查询中,以获取主管的姓名和他们所在员工的人数 – sample

+0

如果主管是男性,我的回答并不排除结果 – GuidoG

0

这样的事情?

SELECT supervisors.ssn 
FROM employee AS supervisors 
    inner join employee e on supervisors.ssn = e.supersnn 
         and e.sex = 'F' 
group by supervisors.ssn 
1

您有一个查询返回至少有一名女性员工的所有主管。

如果您改变了想法,想要得到结果很容易。

您想要一个查询,返回不是至少有一名男性员工的主管组成员的所有主管。