sql查詢時,根據特定的條件給表的某一個字段賦值


   先講一下需要這個需求的情景:

   這是一個招聘求職項目遇到的一個問題。個人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

  最終搞定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM