使用单个查询仅选择非匹配项(仅限联接)
本文关键字:单个 查询 选择 | 更新日期: 2023-09-27 18:36:59
我在SQL Server(T-SQL)中有一个非常简单的多对多表结构(见下文)。
我需要:
- 选择没有关联人员的所有作业
- 选择仅与不可见和/或删除的人员关联的所有作业
- 选择所有已删除的作业。
所有这些都应返回单个结果表
这在单个仅连接查询中是否可行(不使用 IN
/NOT IN
、嵌套选择、联合或临时表等)?
架构:
人
ID
IsVisible
IsDeleted
人物职位
PersonID
JobID
工作
ID
IsDeleted
我应该能够单独执行每个查询,然后在代码中联接数据集,但我很好奇是否有更简单的方法可以使用联接来做到这一点。
如果准确,伪代码的响应很好。
谢谢!
尝试
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
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