我有下表:
- 员工(eid,ename,薪水,did,分类)
- 项目(pid、pname、did、预算、ddate)
- 部门(did,dname,floor,head)
- dbudget(做了,byyear,预算)
- 项目(pid、pname、did、预算、ddate)
- Onproject(pid,eid,fdate)
did 部门标识符,所以我们需要一些在 employee.did 但不在 project.did 中的东西
我想检索所有未通过截止日期的项目,并且它的所有工作人员都属于不负责该项目的部门。
现在,我不知道如何检查 ddate 是否结束(ddate 是截止日期,我不知道它是否通过),以及如何在查询中表示它。
我将展示目前构建的查询:
SELECT Project.pname
from Project
FULL OUTER JOIN Employee
on Project.did <> Employee.did
AND ....
(不知道如何检查 ddate 是否已通过)是否有一个函数可以在 SQL 中显示日期以进行比较(因此差异将为正)或使用给定信息的任何技巧?
问题并不简单,因为它涉及 2 个实体/表(
Employee
和Project
),它们之间有 2 个关系。一种是通过Department
(项目属于部门,员工属于部门),另一种是通过Onproject
(表明员工已经开始从事项目)。此外,答案需要关系划分查询(“all is workers belong ...”)。进行关系除法的方法有很多种——而且都在不简单到非常复杂的范围内。
表达问题的一种方法是使用(双重)否定。与其寻找所有工人都不做某事的项目,不如寻找没有工人做某事的项目。这可以用
NOT EXISTS
子查询表示:或与
EXCEPT
:给定表定义,后者可以(简化?)使用
NATURAL JOIN
: