【发布时间】:2016-03-02 17:32:53
【问题描述】:
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)
所以我真的很困惑如何在选择命令中添加更多材料,比如说添加 SSN
我想查找项目编号为 47 的所有经理的姓氏和名字:
SELECT lname, fname
FROM employee e, department d
Where d.mgrssn = e.ssn
WHERE e.ssn IN (SELECT w.essn
FROM works_on w, project p
WHERE w.pno = p.pnumber
AND w.pno ='47'
);
但现在我想给它添加 ssn:
SELECT lname, fname, ssn
FROM employee e, department d
Where d.mgrssn = e.ssn
WHERE ssn IN (SELECT w.essn
FROM works_on w, project p
WHERE w.pno = p.pnumber
AND w.pno ='02'
);
【问题讨论】:
-
(1) 您的第二个查询有什么问题?它似乎在选择列表中包含 ssn 列。 (2) 不要使用 SSN 作为表键,这是一个有问题的选择。
-
你能写一个答案吗?我保证我会接受。基本上我只想让这两个命令正确,有和没有 SSN 作为标准
-
不清楚是什么问题。您是要显示 SSN 还是按 SSN 过滤?
-
对不起,我的意思是对于第一个命令,我只想获取正在从事项目 47 的经理的 lname 和 fname,第二个命令是包含姓氏和名字的经理的社会保障
-
员工表引用
e保存经理记录并具有 ssn(您在员工/部门表的联接中使用了它),因此您的第二个查询似乎已经正确。
标签: sql database select in-clause