sql查询时,根据特定的条件给表的某一个字段赋值

时间:2022-02-12 15:06:51

   先讲一下需要这个需求的情景:

   这是一个招聘求职项目遇到的一个问题。个人A向公司B的职位投递简历后,公司B会收到个人A的简历;但是A投递后把简历删除,公司收到的简历信箱

还有这个简历,但却不能看了。

 

  原因:B收到的简历放在表[ResumeRecord]里,当B想看A的简历时会去表[Resume]查询(A已经把自己的简历删了,所以找不到了)

 

  针对这一情况,我想到了两种方法:

  1.A删除自己的简历时,同时把自己的投递记录删除;

  2.完善B收收到的简历信箱列表。当A把自己的简历删除后,B只能看这条记录,不能看A的详细信息。在这条记录旁给出【此简历已被该用户删除】的注释;

  

     接下来分析一下这两种方法,方法一虽然能解决程序的异常问题,但是对于B是不公平了。(A删除之前是可以看的,删除后怎么就没有了呢?会不会很怪。)

   所以果断采取方法二。实现方法二有两种方式,一是在查询记录的时候,对每一条记录查询一次,查看这条记录的简历是否存在(效率慢了),二是写成一个sql

   查询。

 

select top 15 * from 
(
  select 
  'Note'= case when b.ID IS NULL then '此简历已被该用户删除' else '' end, 
  a.ID, a.[Type], a.UserId, a.SubjectId, a.AreaId, a.CompanyId, a.ResumeId, a.SpendType, a.UpdateTime, 
  a.CreatTime, a.Remark, a.AreaPid, a.SubjectPid, a.IsEmailPost, row_number() over (order by a.ID Desc) as r 
  from [ResumeRecord] a 
  left join [Resume] b 
  on a.ResumeId = b.ID
  where ( type= 2 or type= 1 ) and CompanyId=158732
)  t 
where t.r>0 order by t.ID Desc

 

  这个sql可以查出想要的结果,但是当时用的是封装好的实体(这里就不细说了),所以到控制器里却无法取出自定义字段[Note]的值。

于是就想到把对得出的值赋到表[ResumeRecord]的Remark字段,前提是当时的情景没有用到[Remark]这个字段。所以使用其他闲的

字段也可以,字段类型最好与得出的值类型一样,这才是本篇的重点。 

select top 15 * from 
(
select 
(
    case when b.ID IS NULL then '此简历已被该用户删除' else '' end) as Remark, 
    a.ID, a.[Type], a.UserId, a.SubjectId, a.AreaId, a.CompanyId, a.ResumeId, a.SpendType, a.UpdateTime, 
    a.CreatTime, a.AreaPid, a.SubjectPid, a.IsEmailPost, row_number() over (order by a.ID Desc) as r 
    from [ResumeRecord] a 
    left join [Resume] b 
    on a.ResumeId = b.ID
    where ( type= 2 or type= 1 ) and CompanyId=158732
)  t 
where t.r>0 order by t.ID Desc

  最终搞定。