oracle中单字段存在1个或2个关联id时的查询sql

前端之家收集整理的这篇文章主要介绍了oracle中单字段存在1个或2个关联id时的查询sql前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. //上午值班人数为1人或2人时,查出值班信息和个人信息
  2. select
  3. b.contact as mContact,b.email as mEmail,c.contact as m2Contact,c.email as m2Email,t.* from(
  4. select
  5. substr(a.morning_people_ids,instr(a.morning_people_ids,',1,1)-1) as amId,substr(a.morning_people_ids,1)+1) as bmId,a.*
  6. from tb_duty a
  7. ) t,tb_duty_person_info b,tb_duty_person_info c
  8. where 1=1 and
  9. nvl2(t.amId,t.amId,t.bmId)=b.person_id
  10. and t.bmId=c.person_id
  11. and t.dscd='340100' and t.unit_id=4
  12. and t.day0='2015-08-06'


  1. //整个8月的
  2. select
  3. m1.person_name as mName,m1.contact as mContact,m1.email as mEmail,m2.person_name as m2Name,m2.contact as m2Contact,m2.email as m2Email,a1.person_name as aName,a1.contact as aContact,a1.email as aEmail,a2.person_name as a2Name,a2.contact as a2Contact,a2.email as a2Email,e1.person_name as eName,e1.contact as eContact,e1.email as eEmail,e2.person_name as e2Name,e2.contact as e2Contact,e2.email as e2Email,l1.person_name as lName,l1.contact as lContact,l1.email as lEmail,l2.person_name as l2Name,l2.contact as l2Contact,l2.email as l2Email,t.week_day,t.flag,t.day0
  4. from(
  5. select
  6. substr(a.morning_people_ids,1)-1) as mId,1)+1) as m2Id,substr(a.afternoon_people_ids,instr(a.afternoon_people_ids,1)-1) as aId,1)+1) as a2Id,substr(a.evening_people_ids,instr(a.evening_people_ids,1)-1) as eId,1)+1) as e2Id,substr(a.leader_ids,instr(a.leader_ids,1)-1) as lId,1)+1) as l2Id,tb_duty_person_info m1,tb_duty_person_info m2,tb_duty_person_info a1,tb_duty_person_info a2,tb_duty_person_info e1,tb_duty_person_info e2,tb_duty_person_info l1,tb_duty_person_info l2
  7. where 1=1
  8. and
  9. nvl2(t.mId,t.mId,t.m2Id)=m1.person_id
  10. and t.m2Id=m2.person_id
  11. and
  12. nvl2(t.aId,t.aId,t.a2Id)=a1.person_id
  13. and t.a2Id=a2.person_id
  14. and
  15. nvl2(t.eId,t.eId,t.e2Id)=e1.person_id
  16. and t.e2Id=e2.person_id
  17. and
  18. nvl2(t.lId,t.lId,t.l2Id)=l1.person_id
  19. and t.l2Id=l2.person_id
  20. and t.dscd='340100' and t.unit_id=4
  21. and to_char(to_date(t.day0,'yyyy-mm-dd'),'yyyy-mm')='2015-08'

附:
  1. //查询tb_duty_person_info第11-20条记录(根据person_id排序):
  2. //0.031秒
  3. select a.* from (
  4. select rownum rn,b.* from tb_duty_person_info b where rownum<21 order by b.person_id
  5. ) a
  6. where a.rn>10;
  7. //0.047秒
  8. select a.* from (
  9. select rownum rn,b.* from tb_duty_person_info b order by b.person_id
  10. ) a
  11. where a.rn>10 and rn<21 ;

猜你在找的Oracle相关文章