检索处理由部门号5控制的所有项目的每个员工的姓名

时间:2014-07-26 23:47:17

标签: mysql

这个问题来自于基础数据库系统第6版(Elmasri,Navathe)第5章查询3b。作者回答这个问题的一种方法是使用存在量词:

SELECT Lname, Fname
FROM EMPLOYEE
WHERE NOT EXISTS ( SELECT *
                  FROM WORKS_ON B
                  WHERE ( B.Pno IN ( SELECT Pnumber
                                    FROM PROJECT
                                    WHERE Dnum=5 )
                  AND
                  NOT EXISTS ( SELECT *
                               FROM WORKS_ON C
                               WHERE C.Essn=Ssn
                               AND C.Pno=B.Pno )));

作者已将解决方案解释为:

  

选择每个员工   没有由部门5控制的项目,该员工不在

上工作

我无法理解第二个内部相关子查询如何与其他不相关的子查询和外部查询相关联以给出正确的结果。
任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:0)

public class GetMiddleware
{
    private RequestDelegate _next;

    public GetMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public Task Invoke(HttpContext context)
    {
        if (context.Request.Path == "/whatever")
        {
            context.Response.Headers.Add("Location", "https://example.com");
            context.Response.StatusCode = 302;
            return Task.CompletedTask;
        }

        return _next.Invoke(context);
    }
}

请注意,除了在mysql中不起作用

答案 1 :(得分:0)

SELECT FNAME, LNAME
FROM EMPLOYEE 
WHERE NOT EXISTS 
((  SELECT PNUMBER 
        FROM PROJECT 
        WHERE DNUM = 5) 
     EXCEPT 
    (   SELECT PNO 
        FROM WORKS ON 
        WHERE ESSN = SSN));

答案 2 :(得分:-1)

SELECT FNAME,LNAME
FROM   EMPLOYEE
WHERE  EXISTS   ( SELECT *
                  FROM DEPENDENT
                  WHERE SSN=ESSN)
AND EXISTS 
                ( SELECT *
                  FROM DEPARTMENT
                  WHERE SSN=MGR_SSN);