SQL - 在不使用游标的情况下检查表数据之间的一致性

时间:2014-04-21 12:08:11

标签: sql stored-procedures cursor

我正在使用SQL,我有4个表。

  1. tbl_project(project_id是主键)
  2. tbl_task(包含task_id作为主键,project_id作为外键)
  3. tbl_assignment(包含assignment_id作为主键task_id作为外键)
  4. tbl_document(包含document_id作为主键,assignment_id作为外键),

    • 项目可以有一个或多个任务
    • 任务可以有一个或多个受让人
    • 一名受助人可以拥有一份或多份文件
  5. 现在我需要编写一个存储过程来验证项目并返回验证结果,其中项目id将作为参数传递。

    1. 需要检查具有至少一项任务的项目。
    2. 此项目下的所有任务至少有1个任务
    3. 此项目/任务下的所有作业至少有1个文件
    4. 我有一个临时表,我需要插入验证错误,如"任务 - 任务1不包含任何作业"," Assignemnt - Assignment2不包含任何documnets"等

      有没有办法在不使用游标的情况下实现这个逻辑

1 个答案:

答案 0 :(得分:2)

您不需要游标进行此类型验证。以下是三个执行此操作的查询:

没有任务的项目:

select p.*
from tbl_projects p left outer join
     tbl_tasks t
     on p.project_id = t.project_id
where t.project_id is null;

任务至少有一项任务:

select p.*
from tbl_tasks t left outer join
     tbl_assignments a
     on a.task_id = t.task_id
where a.task_id is null;

所有作业至少有一个文件:

select p.*
from tbl_assignments a left outer join
     tbl_documents d
     on a.assignment_id = d.assignment_id
where d.assignment_id is null;