日期:2014-05-17  浏览次数:20425 次

如何写这样的sql
有三张表HRResume(简历表):
ID PersonName DegreeId(学历) WorkYearId(工作年限) ...
1 张三 2 1
2 李四 1 2
3 王二 4 4
......................
其中DegreeId:1,中学,2,大专,3,本科,4,硕士,5,博士
 WorkYearId:1,应届毕业生,2,一年以上,3,二年以上,4,三年以上,5,五年以上,6,八年以上,

RecruitReq(招聘需求表)
ID DeptId(部门) PositionId(岗位) DegreeId(学历) WorkYearId(工作年限) ...
1 1 10 2 2
2 2 11 1 4
.....................
RequestOrder(应聘单据表)
ID ResumeId(简历编号) ReqId(招聘需求编号) OrderDate
1 1 1 2011-02-16
2 2 1 2011-02-16
3 2 2 2011-02-16
..................

现在要再应聘单据表中找出符合招聘需求中的条件的应聘单据。也就是说:
招聘需求表中ID为1的那条记录:部门为1,岗位为10的招聘需求中,要求学历为大专,工作年限为一年以上,那么在应聘单据表中需要按照ResumeId(简历编号)到简历表中查找此应聘人的学历跟工作年限,如果符合那么筛选出来。此处需要注意的是如果应聘需求表中学历为大专,工作年限为一年以上,那么在应聘单据表中应聘人的简历学历在大专以上,工作年限在一年以上的都应该查找出来。请问如何写这样的sql?


------解决方案--------------------
select a.* from RequestOrder a left join RecruitReq b on a.ReqId=b.ID 
left join HRResume a on c.ID=a.ResumeId where c.DegreeId=2 and WorkYearId=2
------解决方案--------------------
SQL code
select ro.*, rr.*, hr.*
  from RequestOrder 
  join RecruitReq rr
    on ro.ReqId = rr.ID
  left join HRResume hr
    on ro.ResumeId = hr.ID
 where hr.DegreeId >= rr.DegreeId
   and hr.WorkYearId >= rr.WorkYearId

------解决方案--------------------
SQL code
select ro.*, rr.*, hr.*
  from RequestOrder ro
  join RecruitReq rr
    on ro.ReqId = rr.ID
  left join HRResume hr
    on ro.ResumeId = hr.ID
 where hr.DegreeId >= rr.DegreeId
   and hr.WorkYearId >= rr.WorkYearId

------解决方案--------------------

SQL code

select a.PositionId,a.DegreeId,a.WorkYearId,,a.PositionId,b.DeptId,b.PositionId,b.DegreeId,b.WorkYearId,c.PersonName,c.DegreeId,c.WorkYearId
from RecruitReq as a 
inner join RequestOrder as b 
on a.ID=b.ReqId  
left join HRResume as c
on c.Id=b.ResumeId 
where a.DegreeId>=c.DegreeId and a.WorkYearId>=c.WorkYearId