mysql - sql查询中的左外连接

标签 mysql sql database group-by outer-join

数据库:

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)

我想使用left outer joingroup by 来...
查找那些从事 3 个或更多项目并且不在克利夫兰的经理的姓氏和 SSN。

这是我目前所拥有的:

select Lname
  from Employee e outer join Department d
where (e.ssn = d.mgrssn) 
   and  ssn NOT in (
                      select  w.essn
                       from   works_on w outer join Project p
                      where w.pno = p.pnumber
                          and  p.plocation = 'Cleveland'
                      group by w.essn
                      having count(*) >= 3
                     )

我是否正确地使用了 left outer joingroup by?我应该将这段代码分成两部分,就像循环一样吗?

最佳答案

选择JOIN 查找员工的所有项目

首先 HAVING 告诉你这个用户在 'Cleveland' 没有项目

第二个 HAVING 告诉你这个用户有 3 个或更多项目

.

SELECT e.Lname, e.ssn
FROM Employee e   
JOIN works_on w
  ON e.ssn = w.essn
JOIN Project p
  ON w.pno = p.pnumber
GROUP BY e.ssn
HAVING 
     SUM(CASE WHEN p.plocation = 'Cleveland' THEN 1 ELSE 0 END) = 0
AND  COUNT(*) >= 3

关于mysql - sql查询中的左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33768374/

相关文章:

mysql - 如何优化多表连接 View 以获得更快的响应?

mysql - 一对多关系。必须是比使用子查询更好的方法

database - 在维度表中包含来自累积快照表的所有信息?

Ruby 元编程 : dynamically define methods based on database entries?

php - 用php创建数据库

mysql - ER 模型的未知部分

mysql - 连接 Mysql 错误 (111)

php - 验证电子邮件地址是否存在

mysql - Magento 商店 - SQL 错误

sql - 为什么delete语句到一个表,lock一个select语句到同一个表--SQL Server