有好几个表,比如:
表一:性别(性别代号   性别)两个字段
表二:学历(学历代号   学历)两个字段
表三:信息(姓名,性别代号,学历代号)而且这几个字段允许为空
我现在想得到这样的表
综合表(姓名,性别,学历)
应该怎么写SQL语句

解决方案 »

  1.   

    select t1.姓名,t2.性别,t3.学历
    from [信息] t1
    left join [性别] t2 on t2.[性别代号]=t1.[性别代号]
    left join [学历] t3 on t3.[学历代号]=t1.[学历代号]
      

  2.   

    select c.姓名,a.性别,b.学历
    from 性别 a,学历 b,信息 c
    where c.学历代号=b.学历代号 and c.性别代号=a.性别代号sql_server2000写法
      

  3.   

    用点心学吧!
    select * from studName       SexID      XueId      
    ---------- ---------- ---------- 
    张三         01         01        
    李花         02         03  
    --------------------------------------
    ---------------------------------------
    select * from sexsexID      sex        
    ---------- ---------- 
    01         男        
    02         女     
    ----------------------------------------------
    ----------------------------------------------select * from xueXueId      XueLi      
    ---------- ---------- 
    01         专科      
    02         本科      
    03         硕士   
    ------------------------------------------------------
    -----------------------------------------------------
    -----------------------------------------------------
    select stud.[Name],sex,XueLi From stud,SEX,xue where stud.sexID=sex.SEXID and stud.XueId=xue.XueId Name       sex        XueLi      
    ---------- ---------- ---------- 
    张三         男          专科      
    李花         女          硕士
      

  4.   

    select c.姓名 as 姓名,a.性别 as 性别,b.学历 as 学历
    from 性别 a,学历 b,信息 c
    where c.学历代号=b.学历代号 and c.性别代号=a.性别代号
    最简单的写法但是效率不高!
      

  5.   

    select x.姓名,(select 性别 from 性别 s where s.性别代号=x.性别代号) as 性别,
    (select 学历 from 学历 xl where xl.学历代号=x.学历代号) as 学历 from 信息 x 可以采用以上这种子查询的方法,也可以采用左连接的的方法,不过要注意左连接是表的位置,最要不要才用内连接,如果有空值,将会丢失数据
      

  6.   

    楼上说的都可以,你随便找个就行了,
    不过性别没必要再分表了吧?最多三种,男女未知,最多再来个阴阳人:D
    呵呵,在程序里写case就可以了
      

  7.   

    select t1.姓名,t2.性别,t3.学历
    from t4[信息]
    INNER JOIN t1,t2,t3 
    ON t4.[姓名代号] = t1.[姓名代号],t4.[性别代号] = t2.[性别代号],t4.[学历代号] = t3.[学历代号]只列出关联字段!
      

  8.   

    应当用:select t1.姓名,t2.性别,t3.学历
    from [信息] t1
    left join [性别] t2 on t2.[性别代号]=t1.[性别代号]
    left join [学历] t3 on t3.[学历代号]=t1.[学历代号]如果用:
    select c.姓名 as 姓名,a.性别 as 性别,b.学历 as 学历
    from 性别 a,学历 b,信息 c
    where c.学历代号=b.学历代号 and c.性别代号=a.性别代号那么在[信息]表中,学历代号和性别代号为空的记录会丢失。
      

  9.   

    select t1.姓名,t2.性别,t3.学历
    from [信息] t1
    left join [性别] t2 on t2.[性别代号]=t1.[性别代号]
    left join [学历] t3 on t3.[学历代号]=t1.[学历代号]
    --------------------------------------------------------
    select t1.姓名,t2.性别,t3.学历
    from [信息] t1
    inner join [性别] t2 on t2.[性别代号]=t1.[性别代号]
    inner join [学历] t3 on t3.[学历代号]=t1.[学历代号]
    --------------------------------------------------------
      

  10.   

    select t1.姓名,
    CASE [性别代号]
             WHEN '01' THEN '男'
             WHEN '02' THEN '女'
             WHEN '03' THEN '不男不女'
             WHEN '04' THEN '半男半女'
             ELSE '未知'
     END AS 性别,t3.学历
    from [信息] t1
    left join [学历] t3 on t3.[学历代号]=t1.[学历代号]
      

  11.   

    楼主看清了,上面凡是inner join的错,凡是一条select的错一条select的条件应为
    where ( stud.XueId=xue.XueId or stud.XueId is null)
      

  12.   

    Truly(NULL) 写法很是友好的