2016-10-03 90 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

您有一個查詢返回至少有一名女性員工的所有主管。

如果您改變了想法,想要得到結果很容易。

您想要一個查詢,返回不是至少有一名男性員工的主管組成員的所有主管。