假如我现在有3张表:
A 学生编号 姓名 性别 
  01       X    男
  02       Y    女
B 学科编号 学科名称
  01       语文
  02       数学
  03       计算机C 成绩编号  学科编号 分数 学生编号
  01        01    60   01
  02        02       65   01
  03        03       66   01
  04        01       67   02
  05        02       68   02
  06        03       69   02
3张表的第一个字段都是主键
现在我想得到如下的查询结果,该怎么做
姓名 性别 学科名称 分数
 X    男   语文     60
 X    男   数学     65
 X    男   计算机   66
 Y    女   语文     67
 Y    女   数学     68
 Y    女   计算机   69 

解决方案 »

  1.   

    --> 测试数据: #A
    if object_id('tempdb.dbo.#A') is not null drop table #A
    go
    create table #A (学生编号 varchar(2),姓名 varchar(1),性别 varchar(2))
    insert into #A
    select '01','X','男' union all
    select '02','Y','女'
    --> 测试数据: #B
    if object_id('tempdb.dbo.#B') is not null drop table #B
    go
    create table #B (学科编号 varchar(2),学科名称 varchar(6))
    insert into #B
    select '01','语文' union all
    select '02','数学' union all
    select '03','计算机'
    --> 测试数据: #C
    if object_id('tempdb.dbo.#C') is not null drop table #C
    go
    create table #C (成绩编号 varchar(2),学科编号 varchar(2),分数 int,学生编号 varchar(2))
    insert into #C
    select '01','01',60,'01' union all
    select '02','02',65,'01' union all
    select '03','03',66,'01' union all
    select '04','01',67,'02' union all
    select '05','02',68,'02' union all
    select '06','03',69,'02'select 姓名,性别,学科名称,分数 
    from #C C
    JOIN #A A ON C.学生编号=A.学生编号
    JOIN #B B ON C.学科编号=B.学科编号姓名   性别   学科名称   分数
    ---- ---- ------ -----------
    X    男    语文     60
    X    男    数学     65
    X    男    计算机    66
    Y    女    语文     67
    Y    女    数学     68
    Y    女    计算机    69(6 行受影响)
     
      

  2.   

    select 姓名,性别,学科名称,分数 
    from #C C
    JOIN #A A ON C.学生编号=A.学生编号
    JOIN #B B ON C.学科编号=B.学科编号除了一楼的这个写法,还可以这样写.select 姓名,性别,学科名称,分数 
    from #C C , #A A , #B B 
    where C.学生编号=A.学生编号 and C.学科编号=B.学科编号