Sql 无法编写此查询,正在尝试使用内部联接

Sql 无法编写此查询,正在尝试使用内部联接,sql,database,select,inner-join,Sql,Database,Select,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)

我的数据库:

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)
我想使用“内部联接”获取没有子女的已婚员工的姓氏

到目前为止,我只能得出以下结论:

SELECT E.*
FROM Employee AS E INNER JOIN Dependent AS D
ON ( E.ssn = D.essn AND D.relationship IN ( 'husband','wife') )

不管怎么说,你想给我修改代码吗?我想使用内部联接来查找所需内容。

编辑:另一种不使用减号的方法

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

编辑:不使用减号的另一种方式

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
表中,并将其他家庭成员限制为丈夫或妻子

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')

尝试以下方法。内部查询查找只有一个受抚养人的所有员工,可以是配偶或其他家庭成员。然后,我将这个结果再次加入到
Dependent
表中,并将其他家庭成员限制为丈夫或妻子

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')

是的。我现在看到了。正在更正。
减号是非标准SQL。ANSI SQL等价物是
除了
谢谢!尝试了另一种方法使用
不在
我可以在e.ssn=d.essn上问一下吗,是加入empolyee的从属关系吗?是找到生日吗?只是加入基于公共密钥的员工和从属关系。如果要显示
生日
员工
表中的任何其他列,可以在外部选择查询中使用它们。或者使用外部选择中的
e.*
获取所有列。是。我现在看到了。正在更正。
减号是非标准SQL。ANSI SQL等价物是
除了
谢谢!尝试了另一种方法使用
不在
我可以在e.ssn=d.essn上问一下吗,是加入empolyee的从属关系吗?是找到生日吗?只是加入基于公共密钥的员工和从属关系。如果要显示
生日
员工
表中的任何其他列,可以在外部选择查询中使用它们。或者使用outer select中的
e.*
获取所有列。感谢您输入到目前为止所做的尝试,但是了解表中的一些示例数据/您的预期输出以及您使用的数据库名称/版本会非常有帮助?博士后?Oracle?请查看下面给出的答案,谢谢。感谢您提供您迄今为止所做的尝试,但了解表中的一些示例数据/您的预期输出以及数据库名称/版本确实会有所帮助。您使用的是哪种DBMS?博士后?Oracle?请查看下面给出的答案,谢谢。