不希望用select (select 表2.学历....),(select 表2.学位)xx,xx的方式实现,感觉效率不高,由于每次只能是一个字段,重复性就大了,比如要select两个字段就得写两个查询。

解决方案 »

  1.   

    就这么一回事:
    表1:编号       姓名   单位
         12345     张三   中国浙江xxx
         12346     李四   中国江苏xx
         12347     王五   中国浙江xx表2  编号   学历  学位 取得时间
         12345  高中  无   1992-7-1
         12345  大专  无   1995-7-1
         12346  初中  无   1989-7-1
         12346  高中  无   1992-7-1
         12346  本科  学士 1996-7-1要求查询生成这样一个表,当前学历表:     姓名     学历    学位
         12345    大专    无   
         12346    本科    学士
         12347    null    null
             
      

  2.   

    表person(人员资料): id, pName, dw
    表xl(学历):id, PersonId, xl, qdxlsj, xw
    sql语句:
     select a.pName, a.dw, b.xl, b.qdxlsj, b.xw from person a, xl b
     where a.id = b.PersonId
     group by a.pName, a.dw, b.xl, b.qdxlsj, b.xw, b.PersonId 
     having b.qdxlsj = (select max(c.qdxlsj) from xl c 
     where c.PersonId = b.PersonId)  类似上面的写法,改为中文即可
      

  3.   

    谢谢关注!
    不过你的办法并不适用我的要求。
    一,其实字段与表都比较多,是对四张表的连接查询;
    二、如果能用left join解决是最好的了。
      

  4.   

    有了点思路,但到关键时刻总是不通了。
    还在思索中....
    其实原来的方案已经实现了,但是现在多了个东西:
    就这么一回事:
    表1:编号       姓名   单位
         12345     张三   中国浙江xxx
         12346     李四   中国江苏xx
         12347     王五   中国浙江xx表2  编号   学历  学位 取得时间        学校
         12345  高中  无   1992-7-1    xxxxxxxx
         12345  大专  无   1995-7-1    yyyyyyyy
         12346  初中  无   1989-7-1    mmmmmmm
         12346  高中  无   1992-7-1     ccccc
         12346  本科  学士 1996-7-1      eee要求查询生成这样一个表,当前学历表:     姓名     学历    学位     学校  时间
         12345    大专    无      xxx  
         12346    本科    学士    hdf
         12347    null    null   null  null
    由于 时间与学位学历都是数字型或时间型,因此可以用max()方法取出,但问题是文本型的“学校”与“专业”取不出来,对于这二者而言,分组后并无大小(新旧)可言。
             
      

  5.   

    呵呵,已经弄出了。
    谢谢大家,可以用多层SQL,可能效率比较低,不过好歹是完成了。