我有一个studen表 字段为:ID(编号)  Name(姓名) ChineseTID(姓名老师ID) EnglishTID(英语老师ID)
ID   Name   ChineseTID   EnglishTID
1    张三   01           02
2    李四   01           04和一个teacher表 字段为ID(老师编号)  Name(老师姓名)ID    Name
01    王老师
02    阳老师
03    朱老师
04    虞老师现在我要返回的数据要求为: 学生的姓名,学号和对应的语文老师姓名,和英语老师姓名
如:  
ID    Name    ChineseTName   EnglishTName
1     张三    阳老师         虞老师请问:该如何写SQL语句....谢谢了        

解决方案 »

  1.   

    select Name 
    (select Name  from teacher where ID = ChineseTID  ) as ChineseTName ,
    (select Name  from teacher where ID = ChineseTID  ) as EnglishTName from studen
      

  2.   

    SELECT A.ID,A.NAME,B.Name as ChineseTName,C.Name as EnglishTName
    FROM  studen A LEFT JOIN
    teacher B ON B.ID=A.ChineseTID
    LEFT JOIN 
    teacher C ON C.ID=A.EnglishTID
      

  3.   


    select [ID],[Name]
    (select Name  from teacher where ID = ChineseTID  ) as [ChineseTName],
    (select Name  from teacher where ID = EnglishTID ) as [EnglishTName] from studen
      

  4.   

    select A.ID,A.[Name],B.Name as [ChineseTName],C.Name as [EnglishTName]
    From studen A Inner Join teacher B on A.ChineseTID=B.ID
    Inner Join teacher  C On A.EnglishTID =C.ID
      

  5.   


    select studen.ID,studen.name, Ta.name, Tb.nam
    from studen join teacher Ta
    on Ta.ID = studen.ChineseTID  
    join teacher Tb
    on  Tb.ID = studen.EnglishTID
     
      

  6.   

    select [ID],[Name]
    (select Name  from teacher where ID = ChineseTID  ) as [ChineseTName],
    (select Name  from teacher where ID = EnglishTID ) as [EnglishTName] from studen
      

  7.   


    create table student
    (
    ID int identity(1,1) not null,Name varchar(20),ChineseTID int,EnglishTID int
    )   
    insert into student
    select '张三' , 1,2 union all 
    select '李四' , 1,4 
    create table teacher 
    (
    ID int identity(1,1) not null,Name varchar(20)
    )
    insert into teacher
    select '王老师' union all
    select '阳老师' union all
    select '朱老师' union all
    select '虞老师' select 
    ID,Name,
    (select Name from teacher t where ChineseTID=t.ID) as ChineseTeacherName,
    (select Name from teacher t where EnglishTID=t.ID) as EnglishTeacherName
    from
    student ID          Name                 ChineseTeacherName   EnglishTeacherName
    ----------- -------------------- -------------------- --------------------
    1           张三                   王老师                  阳老师
    2           李四                   王老师                  虞老师 
      

  8.   

    select [ID],[Name]
    (select Name  from teacher where ID = ChineseTID  ) as [ChineseTName],
    (select Name  from teacher where ID = EnglishTID ) as [EnglishTName] from studen这种写法的执行速度最快。 其他的凡是有 join 表联查的,速度回慢的多。在一百万条数据下,执行科看出效果。 
    SELECT A.ID,A.NAME,B.Name as ChineseTName,C.Name as EnglishTName 
    FROM  studen A LEFT JOIN 
    teacher B ON B.ID=A.ChineseTID 
    LEFT JOIN 
    teacher C ON C.ID=A.EnglishTID select studen.ID,studen.name, Ta.name, Tb.nam
    from studen join teacher Ta
    on Ta.ID = studen.ChineseTID  
    join teacher Tb
    on  Tb.ID = studen.EnglishTID等这些执行速度多回很慢的。 
      

  9.   

    select ID,name,max(ChineTeacher) ChineTeacher ,max(EnglishTeacher) EnglishTeacher  
    from
    (
    select A.id,A.name,
           ChineTeacher=case when A.ChineseTID=B.id then B.name else null end,
           EnglishTeacher  =case when A.EnglishTID=B.id then B.name else null end
     from student A,teacher B
    )A
    group by ID,name
      

  10.   

    select name 
    ,[Chineseteacher] = select name from teacher where ChineseTID = ID
    ,[Englishteacher] = select name from teacher where EnglishTID = ID
    from student