2015-11-25 28 views
1
EMPLOYEE (fname, minit, lname, ssn, birthdate, address, sex, salary, superssn, dno)  KEY: ssn 
DEPARTMENT (dname, dnumber, mgrssn, mgrstartdate)    KEY: dnumber. 
PROJECT (pname, pnumber, plocation, dnum)       KEY: pnumber. 
WORKS_ON (essn, pno, hours)           KEY: (essn, pno) 
DEPENDENT (essn, dependent-name, sex, bdate, relationship)    KEY: (essn, dependent-name) 

基本上我想獲得沒有家屬的每個女經理的名字,姓氏和社會保障。卡住在這個命令循環,試圖得到這個查詢命令的正確答案

這裏是我寫到目前爲止:

select e.fname, e.lname, e.ssn 
from employee e, department d 

where d.mgrssn = e.ssn 
and e.sex = 'f' 
and not exist in (

    select * 
    ? 
) 

我基本上停留在SELECT語句我的循環裏面,應該是什麼在它的內部?

+0

沒有循環。 (看我的答案。) – philipxy

回答

1

也許你可以使用一個NOT IN,而不是存在:

SELECT e.fname, e.lname, e.ssn 
FROM employee e, department d 
WHERE d.mgrssn = e.ssn 
AND e.sex = 'f' 
AND e.ssn not in (
    SELECT essn 
    FROM dependant 
) 

希望這有助於!

0

當您選擇女性經理的家屬時,您希望沒有行。因此,編寫一個select返回e.essn的依賴關係,並將其嵌套在NOT EXISTS ()中。或者,當你選擇所有家屬的ssns時,你希望沒有e.essn。因此,編寫一個select返回依賴者的essns並將其嵌入e.ssn NOT IN)`中。

PS:沒有循環! select語句的FROM子句創建一個表,其中包含列名爲的兩個表中的每行可能的組合。 。 (可以省略。如果是唯一的。)然後它只保留滿足WHERE的行。然後你必須擺脫SELECT子句中的重複_column_s。