坚持写这个查询,尝试使用内部连接
stuck on writing this query, trying to use inner join
我的数据库:
EMPLOYEE (fmane, 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)
我想使用内部联接
获取没有 children 的已婚员工的姓氏
到目前为止我只能想出这个:
SELECT E.*
FROM Employee AS E INNER JOIN Dependent AS D
ON ( E.ssn = D.essn AND D.relationship IN ( 'husband','wife') )
无论如何要纠正我的代码?我想使用inner join来查找我想要的。
编辑:不使用 minus 的另一种方法
select e.lname from
employee e inner join dependent d
on e.ssn=d.essn
where D.relationship IN ('husband','wife')
and e.ssn not in (
select e.ssn from
employee e inner join dependent d
on e.ssn=d.essn
where D.relationship IN ('child')
)
有减号
SELECT e.lname
FROM Employee E
INNER JOIN Dependent D
ON E.ssn = D.essn
where D.relationship IN ('husband','wife')
minus
select e.lname
FROM Employee E
INNER JOIN Dependent D
ON E.ssn = D.essn
where D.relationship IN ('child') --or children what ever you are using
尝试以下操作。内部查询查找只有一名受抚养人的所有员工,这可能是配偶 或 另一位家庭成员。然后我再次将此结果加入 Dependent
table 并将其他家庭成员限制为丈夫或妻子。
SELECT e1.*
FROM Employee e1 INNER JOIN
(
SELECT e2.ssn
FROM Employee e2 INNER JOIN Dependent d1 ON e2.ssn = d1.essn
GROUP BY e2.ssn
HAVING COUNT(*) = 1
) t ON e1.ssn = t.ssn
INNER JOIN Dependent d2 ON e1.ssn = d2.essn
WHERE d2.relationship IN ('husband', 'wife')
我的数据库:
EMPLOYEE (fmane, 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)
我想使用内部联接
获取没有 children 的已婚员工的姓氏到目前为止我只能想出这个:
SELECT E.*
FROM Employee AS E INNER JOIN Dependent AS D
ON ( E.ssn = D.essn AND D.relationship IN ( 'husband','wife') )
无论如何要纠正我的代码?我想使用inner join来查找我想要的。
编辑:不使用 minus 的另一种方法
select e.lname from
employee e inner join dependent d
on e.ssn=d.essn
where D.relationship IN ('husband','wife')
and e.ssn not in (
select e.ssn from
employee e inner join dependent d
on e.ssn=d.essn
where D.relationship IN ('child')
)
有减号
SELECT e.lname
FROM Employee E
INNER JOIN Dependent D
ON E.ssn = D.essn
where D.relationship IN ('husband','wife')
minus
select e.lname
FROM Employee E
INNER JOIN Dependent D
ON E.ssn = D.essn
where D.relationship IN ('child') --or children what ever you are using
尝试以下操作。内部查询查找只有一名受抚养人的所有员工,这可能是配偶 或 另一位家庭成员。然后我再次将此结果加入 Dependent
table 并将其他家庭成员限制为丈夫或妻子。
SELECT e1.*
FROM Employee e1 INNER JOIN
(
SELECT e2.ssn
FROM Employee e2 INNER JOIN Dependent d1 ON e2.ssn = d1.essn
GROUP BY e2.ssn
HAVING COUNT(*) = 1
) t ON e1.ssn = t.ssn
INNER JOIN Dependent d2 ON e1.ssn = d2.essn
WHERE d2.relationship IN ('husband', 'wife')