请教一个SQL查询语句写法。。BANJI 表为班级 字段:ID , NIANJI_ID(年级ID) , NAME
NIANJI 表为年级 字段:ID , XUEXIAO_ID(学校ID) , NAME
XUEXIAO 表为学校 字段: ID , NAMESTU表为学生总表 字段 :ID , LZ_TYPE(有三个值的可能BNAJI_ID,NIANJI_ID,XUEXIAO_ID) , LZ_ID(与LZ_TYPE对应,填写年级ID,学校ID或地区ID的值) , NAME现希望查询所有学生表及其地区
即D.* , XUEXIAO.ID不知道我表达清楚没有,希望高手指点。

解决方案 »

  1.   

    select id , decode('BANJI_TYPE',LZ_ID,'XXXX') from STU left join ...
    union 
    select id , decode('NIANJI_TYPE',LZ_ID,'XXXX') from STU left join ...
    union
    select id , decode('XUEXIAO_TYPE',LZ_ID,'XXXX') from STU left join ...1. XXXX 要是一个不会出现的特别的ID
    2. Left join 部分就是by 相应的ID 去找 地区
      

  2.   

    修正一下
    select STU.id , decode(LZ_TYPE,'BANJI_TYPE',LZ_ID,'XXXX'), XUEXIAO.name from STU left join ...
    union 
    select STU.id , decode(LZ_TYPE,'NIANJI_TYPE',LZ_ID,'XXXX'), XUEXIAO.name from STU left join ...
    union
    select STU.id , decode(LZ_TYPE,'XUEXIAO_TYPE',LZ_ID,'XXXX'), XUEXIAO.name from STU left join ...1. XXXX 要是一个不会出现的特别的ID
    2. Left join 部分就是by 相应的ID 去找 XUEXIAO.name
      

  3.   

    SQL> SELECT * FROM xuexiao;        ID NAME
    ---------- ----------
             1 一中
             2 二中SQL> SELECT * FROM nianji;        ID XUEXIAO_ID NAME
    ---------- ---------- ----------
            11          1 一中一年级
            12          1 一中二年级
            21          2 二中一年级
            22          2 二中二年级SQL> SELECT * FROM banji;        ID  NIANJI_ID NAME
    ---------- ---------- ----------
           111         11 1中1年1班
           112         11 1中1年2班
           121         12 1中2年1班
           122         12 1中2年2班
           211         21 2中1年1班
           212         21 2中1年2班
           221         22 2中2年1班
           222         22 2中2年2班已选择8行。SQL> SELECT s.*, x.name
      2    FROM stu s, xuexiao x
      3   WHERE s.lz_type = 'XUEXIAO_ID'
      4     AND s.lz_id = x.id
      5  UNION ALL
      6  SELECT s.*, x.name
      7    FROM stu s, xuexiao x, nianji n
      8   WHERE s.lz_type = 'NIANJI_ID'
      9     AND s.lz_id = n.id
     10     AND n.xuexiao_id = x.id
     11  UNION ALL
     12  SELECT s.*, x.name
     13    FROM stu s, xuexiao x, nianji n, banji b
     14   WHERE s.lz_type = 'BANJI_ID'
     15     AND s.lz_id = b.id
     16     AND b.nianji_id = n.id
     17     AND n.xuexiao_id = x.id;ID         LZ_TYPE                   LZ_ID NAME       NAME
    ---------- -------------------- ---------- ---------- ----------
    001        XUEXIAO_ID                    1 张三       一中
    002        NIANJI_ID                    11 李四       一中
    003        NIANJI_ID                    22 王五       二中
    004        BANJI_ID                    111 刘七       一中
    005        BANJI_ID                    222 陈八       二中SQL>