【问题标题】:stuck on writing this query, trying to use inner join坚持编写此查询,尝试使用内部联接
【发布时间】:2016-02-18 11:04:22
【问题描述】:

我的数据库:

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

无论如何要纠正我的代码?我想使用内部连接来找到我想要的。

【问题讨论】:

  • 感谢您提供到目前为止您尝试过的内容,但了解表中的一些示例数据/您的预期输出和数据库名称/版本确实会有所帮助
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 请查看下面给出的答案,谢谢。

标签: sql database select inner-join


【解决方案1】:

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

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

【讨论】:

  • 是的。我现在看到了。更正。
  • minus 是非标准 SQL。 ANSI SQL 等效项是 except
  • 谢谢!使用not in 尝试了另一种方法
  • 请问e.ssn=d.essn,是join依赖employee,是找生日吗?
  • 只是根据公共密钥加入员工和依赖。如果要显示birthdateemployee 表中的任何其他列,可以在外部选择查询中使用它们。或者在外部选择中使用e.* 来获取所有列。
【解决方案2】:

试试下面的。内部查询查找只有一个受抚养人的所有员工,该受抚养人可能是配偶另一个家庭成员。然后,我再次将此结果加入到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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    相关资源
    最近更新 更多