表1:人员基本信息:ryinfo
主键:emp_id.(唯一标识)
要求查询表1中的人员名称(emp_name)
表2:岗位信息:org_post
主键:post_id(唯一标识)
要求查询表2中的岗位名称(post_name)、岗位分类(post_type)
表3:岗位人员对应信息:empandpost
外键:emp_id(关联人员基本信息表)、post_id(关联岗位信息表)
表3为中间表。
表4:学历学位表:degree
外键:emp_id(关联人员基本信息表)
要求查询出人员学历(degree_s)客户要求显示人员姓名,对应岗位名称、岗位分类、人员学历
求一条sql语句能显示的。谢谢高手们。

解决方案 »

  1.   

    用left join吧
    select ....  from ryinfo t1 left join empandpost t2  on t1.emp_id = t2.emp_id
    left join .........自己去写吧。不懂的话自己去查查,印象更深刻
      

  2.   

      select ry.emp_name,post.post_name, post.post_type ,de.emp_id
    from ryinfo ry
    left join empandpost ep  on ry.emp_id = ep.emp_id
    left join org_post  post on post.post_id = ep.post_id
    left join degree de on de.emp_id = ry.emp_id = de.emp_id
      

  3.   


    SELECT ry.emp_name, op.post_name, op.post_type, d.degree_s
      FROM ryinfo ry,
           org_post op,
           empandpost ep,
           degree d 
     WHERE ry.emp_id = d.emp_id(+)
       AND ry.emp_id = ep.emp_id
       AND ep.post_id = op.post_id;
      

  4.   

    SELECT ry.emp_name, op.post_name, op.post_type, d.degree_s
      FROM ryinfo ry,
           org_post op,
           empandpost ep,
           degree d 
     WHERE ry.emp_id = d.emp_id(+)
       AND ry.emp_id = ep.emp_id
       AND ep.post_id = op.post_id;
      

  5.   

    empandpost表中有一字段  is_main_work 为1则代表主岗还有学历表中一个人也可有多个学历。包含毕业学历、就业学历和最高学历。要求显示为最高学历(字段is_last_degree 为 ‘0’)
      

  6.   

    SELECT ry.emp_name, tmp.post_name, tmp.post_type, d.degree_s
      FROM ryinfo ry,
          (SELECT ep.emp_id, 
                 op.post_name, op.post_type
            FROM org_post op,
                 empandpost ep
           WHERE op.post_id = ep.post_id
             AND ep.is_main_work = 1(+)
          ) tmp,
           degree d 
     WHERE ry.emp_id = d.emp_id(+)
       AND ry.emp_id = tmp.emp_id(+)
       AND d.is_last_degree = 0(+);这个应该满足#9的需求了。