陷入此命令循环,试图获得此查询命令的正确答案

时间:2015-11-25 04:30:13

标签: sql database select command exists

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语句中,应该在其中的内容?

2 个答案:

答案 0 :(得分:1)

也许您可以使用NOT IN而不是EXISTS:

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
)

希望这有帮助!

答案 1 :(得分:0)

当您选择女性经理的家属时,您希望没有行。因此,编写一个选择,返回e.essn的依赖项并将其嵌套在NOT EXISTS ( )中。或者,当您选择所有受抚养者的ssns时,您希望没有e.essn。所以编写一个选择,返回dependents的essns并将其嵌套在e.ssn NOT IN)`中。

PS:没有循环! select语句的FROM子句创建一个表,其中包含两个表中行的每个可能组合,列名为 table column 。 (您可以省略。如果是唯一的。)然后它只保留满足WHERE的行。然后你必须摆脱SELECT子句中的重复_column_s。