【问题标题】:Using outer join and group by to solve the query使用外连接和分组来解决查询
【发布时间】:2016-02-17 03:00:49
【问题描述】:
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

我想用outer join和group by来查询下面的信息,可以吗?

获取员工的 SS 和姓氏

1) 担任部门经理

2) 担任任何员工的主管

到目前为止我所拥有的是:

Select e.ssn, e.lname, e.fname
From employee e, department d
where d.mgrssn = e.ssn

union(?)

select s.ssn, s.lname, s.fname
From employee e2, employee s 
where e.superssn = s.ssn;

1)我认为我的联合是错误的,有什么办法可以改变它,比如使用外连接和分组来获得我需要的东西。

2) 另外,由于我使用了两个员工,一位导师告诉我,我可以使用员工 1 和员工 2 来区分他们,对吗?有没有不使用两个员工的身份证明?

【问题讨论】:

    标签: sql database select group-by outer-join


    【解决方案1】:
    SELECT DISTINCT e.ssn, e.lname, e.fname
    FROM employee e,
      (SELECT mgrssn AS mgrssn
        FROM department
      UNION
      SELECT superssn AS mgrssn
        FROM employee) m
      WHERE e.ssn = m.mgrssn;
    

    应该可以。

    我不确定外部联接或 GROUP BY 在这里如何为您服务;一个从一个表返回在第二个表中有 no 对应行的行,而另一个用于通过聚合函数将多行压缩为一个。

    我也不确定是什么

    2) 另外,由于我使用了两个员工,一位导师告诉我,我可以使用员工 1 和员工 2 来区分他们,对吗?有没有不使用两个员工的身份证明?

    的意思。您可以使用employee1employee2 作为employeealiases,这将允许您对同一个表进行多个独立引用,但是无论您使用多少别名,仍然只有一个@ 987654325@数据库中的表。

    【讨论】:

    • 所以基本上 WHERE e.ssn = m.mgrssn 是联表?因为之前有员工和经理没有联系,所以不能共享信息?
    • 对。这是内连接的“其他”语法。
    • 谢谢! WHERE e.ssn = m.mgrssn 之前的 m 是什么;是错字吗?
    • 这是子查询的表别名,它允许您在 WHERE 子句中将其作为伪表引用。这里实际上可能不需要它,因为 mgrssn 明确来自子查询,但它仍然是一个好主意,一些 DBMS 可能会抱怨它的缺失。
    【解决方案2】:

    1)。您的UNION 是正确的!但是你错过了:

    From employee e2, employee s 
    where e.superssn = s.ssn;
    

    改为:

    From employee e, employee s   -- replace e2 to e
    where e.superssn = s.ssn;
    

    2)。是的你可以!对我来说,要区分 2 个 empls,你可以使用 ssn,因为它是独一无二的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 2019-12-08
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      相关资源
      最近更新 更多