【发布时间】:2020-01-21 16:17:13
【问题描述】:
我有两个表 Task 和 Allocated_Task。
Allocated_Task 有 AT.id、Task.id(可以为空)、AT.allocated_date
任务有Task.id、Task.name等
用户可以提供 Task.id 或 AT.id 作为输入
select AT.id, Task.Name
from Allocated_Task, Task
where (Task.id = :INPUT_TASK_ID or AT.id = :INPUT_AT_id)
预期输出:如果用户将 task.id 作为输入,则应在 Allocated_Tasks 中搜索 task.id 并返回 AT.id,如果存在则返回 Task.Name 或 null,如果在 Allocated_Tasks 中不存在则返回 Task.Name,如果用户给出 AT.id,那么它应该给出 At.id,如果 Allocated_Task 中的 task.id 不为 null 则为 task.name,如果 Allocated_Task 中的 task.id 为 null
分配的任务
AT.id | Task.id
---------------
1 | 10
2 | null
任务
Task.Id | Name
----------------
10 | Name1
20 | Name2
输出:
AT.ID | NAME
---------------------------------------------------
1 | Name1 (if user gives 1 as INPUT_AT_id)
2 | null (if user gives 2 as INPUT_AT_id)
1 | Name1 (if user gives 10 as INPUT_TASK_ID)
null | Name2 (if user gives 20 as INPUT_TASK_ID)
更新:任务分配给员工(以千计),一个员工可以分配n个任务(10s~100s),一个任务可以分配给n个员工。
如果用户按 Task.Id 过滤,我们只需要最新的 Allocated_Task.ID(存储任务分配时间)。使用完全外连接需要几分钟才能执行,这在这种情况下并不理想。是否可以提高查询效率?
【问题讨论】:
标签: sql