首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用单个查询选择只匹配的非匹配(仅连接)

问使用单个查询选择只匹配的非匹配(仅连接)
EN

Stack Overflow用户
提问于 2013-10-25 21:02:14
回答 2查看 109关注 0票数 2

在Server (To)中,我有一个非常简单的多到多表结构(见下文)。

我需要:

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

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

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

模式

Person

代码语言:javascript
复制
  ID
  IsVisible
  IsDeleted

PersonJobs

代码语言:javascript
复制
  PersonID
  JobID

代码语言:javascript
复制
  ID
  IsDeleted

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

伪代码的响应很好,如果准确的话。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-10-25 21:17:17

试一试

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2013-10-25 21:30:59

CASE语句用于标识每个raw的给定条件。如果你不需要知道它们,只需把它移除。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19599372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档