2

我在 SQL Server (T-SQL) 中有一个非常简单的多对多表结构(见下文)。

我需要:

  • 选择所有没有关联人员的工作
  • 选择仅与不可见和/或已删除的人员相关联的所有工作
  • 选择所有已删除的作业。

所有这些都应该返回一个结果表

这在单个仅连接查询中是否可行(不使用IN/ NOT IN、嵌套选择、联合或临时表等)?

架构

  ID
  IsVisible
  IsDeleted

人工作

  PersonID
  JobID

工作

  ID
  IsDeleted

我应该能够单独执行每个查询,然后在代码中加入数据集,但我很好奇是否有更简单的方法可以使用连接来执行此操作。

如果准确,伪代码可以作为响应。

谢谢!

4

2 回答 2

0

CASE语句用于识别每个原始的给定条件。如果您不需要知道它们,只需将其删除。

Select J.Id, CASE WHEN PersonVisible Is Null THEN '1 - Not Associated'
                  WHEN PersonVisible = 1 OR PersonDeleted = 1 THEN '2 - Person NotVisible/Deleted'
                  WHEN J.Deleted = 1 THEN '3 - Deleted Jobs'
             ELSE '4 - All Except above' END as Conditions
From Jobs J Left Join
    (Select jobId,IsVisible PersonVisible, IsDeleted PersonDeleted
     From Person p join PersonJobs pj on p.Id = pj.personId
    ) X On J.Id = X.jobId
Order by Conditions
于 2013-10-25T21:30:59.190 回答
0

尝试

select j.*
from personjobs pj
full join jobs j on pj.jobid = j.id
full join person p on pj.personid = p.id
where pj.personid is null
or p.isdeleted = 1
or p.isvisible = 0
or j.isdeleted = 1
于 2013-10-25T21:17:17.643 回答