小弟有一问题:有一字典表记录学生名和编码。表student,列CODE编码,NAME名称,CODE是主键。现在还有一张业务表,记录班级干部名称,表cadre,列A(班长),B(学习委员),C(体委),D(组委委员)......,现在想求一方法,我要取在个个班级中的班级干部名称,取过来放到一列中。
小弟只是有一个笨方法就是,
SELECT DISTINCT A.CODE FROM student A,cadre B 
WHERE
A.CODE IN(SELECT DISTINCT A FROM cadre)
OR
A.CODE IN(SELECT DISTINCT B FROM cadre)
......
A.CODE IN(SELECT DISTINCT Z FROM cadre)这个句子可以获取这样的信息但是感觉从效率到写法都不是很合适!希望那位大侠给与更简便的方法解析!

解决方案 »

  1.   

    cadre 这个表建的太不符合范式了可以针对cadre建立一个VIEW  Vcadre(CODE,班级,职务)然后就可以方便处理 student与Vcadre的关系了
      

  2.   

    要么直接把cadre改掉一个不妥当的表后的程序设计是很困难的唷
      

  3.   

    我只想到这个
    SELECT A.CODE FROM student WHERE A.NAME IN
    (SELECT A FROM cadre
    union
    SELECT B FROM cadre
    union
    SELECT C FROM cadre)
      

  4.   

    select * from student a 
    where exists 
        (select * from cadre b 
         where a.code = b.A 
            or a.code = b.C 
            or ... )这样可以波?