【发布时间】:2019-04-25 15:18:13
【问题描述】:
我刚开始学习 SQL 中的 Join。我已经通过各种在线和离线教程来理解它。然后我开始做一些问题,以了解我了解多少。 以下是表格
开发者表
1) 身份证号码
2) NAME VARCHAR2
客户表
1)身份证号码
2)NAME VARCHAR2
项目表
1)身份证号码
2)CUSTOMER_ID NUMBER(内部项目为空)
3)NAME VARCHAR2
4)类型编号(0 - Scrum,1 - 固定价格,2 - 概念证明)
5)START_DATE DATE(尚未开始时为空)
6)END_DATE DATE(未完成时为空)
任务表
1) 身份证号码
2)NAME VARCHAR2
3)PROJECT_ID 编号
4)类型编号(0 - 部署,1 - 支持,2 - 票证,3 - 任务)
5)START_DATE DATE(尚未开始时为空)
6)END_DATE DATE(未完成时为空)
Developer_Task 表
1) DEV_ID 编号
2)TASK_ID NUMBER
现在我想为这些问题编写查询:
1) 哪个开发人员在一个实际上已经完成的项目上花费了时间,它是为哪个客户服务的?
2)每个开发人员去年为概念验证项目完成了多少支持任务?
3) 哪个开发人员尚未参与 Scrum 项目?
连接需要一些共同的属性。基于此,我们需要编写查询。我无法理解这些表之间的关系以及如何为这些表编写查询?
【问题讨论】:
-
你的表信息没有列出表之间的外键/关系吗?但是,查看您的表格和列,猜测它们可能是什么并不难 - 例如。您在 CUSTOMER 表中有一个 ID 列,在 PROJECTS 表中有一个 CUSTOMER_ID 列;这些似乎他们之间有关系。
-
如何获取负值意味着没有参与第三次查询的值?
-
你可以使用 MINUS 或外连接。
-
对于“哪个开发人员还没有参与 Scrum 项目?”
-
是的。您将 scrum 任务外部连接到开发人员表并找到具有空任务 ID 的任务,或者您列出开发人员 ID 并减去 scrum 任务开发人员 ID。取决于您希望在最终输出中显示的信息 - 您只需要开发人员 ID 吗?如果是这样,可能 MINUS 是最好的,否则外部连接。或者甚至可能是
where not exists ...