有两个表
表1:
学生编号   学习科目编号   学习成绩 
  1             1001         10
  1             1001         20
  2             1001         20
  1             1002         30
  2             1002         40
  1             1002         80
  1             1003         30
  1             1003         60
  3             1001         30
  3             1002         50
  3             1003         20
表2:
学生编号    学习科目编号   科目名称
  1             1001         语文
  2             1001         语文
  1             1002         数学
  2             1002         数学
  1             1003         英语
  3             1001         语文
  3             1002         数学
  3             1003         英语
先是表1查出学生编号为1的人所学的学习科目的编号,但不能有重复,SQL语句如下:
select distinct[学习科目编号] from 表1 where 学生编号=1 
for (int i = 0; i < myDs.Tables[0].Rows.Count; i++)
{
     s=myDs.Tables[0].Rows[i][0].ToString().Trim();     
}
然后将上面查询到得数据依次再在表2中查询科目名称,根据学生编号=1 and 学习科目编号=s,SQL语句如下:
select 科目名称 from 表2 where 学生编号=1 and 学习科目编号='"+s+"'我最终的目的是想用存储过程来代替这两个SQL语句,或是将这两个语句合成一句SQL语句,然后用存储过程来实现
希望各位帮帮我,我的SQL很烂,请大家见谅!

解决方案 »

  1.   


    select 科目名称 from 表2 where 学习科目编号 in (select distinct[学习科目编号] from 表1 where 学生编号=1)
      

  2.   

    create proc test @id int
    asselect A.科目名称
    from tb2 A
    inner join (select distinct 学习科目编号 from tb1 where 学生编号=@id)B 
    on A.学习科目编号=B.学习科目编号go
    你试一下
      

  3.   

    其实用一条sql语句就可以了。但用存储过程也可以,存储过程就要传递参数
      

  4.   

    只是查询编号为1的话,可以用类似这样的语句,我没有运行过,不知道可以不?
    select 科目名称 
    from 表2 
    where 学生编号=1 
    and 学习科目编号=(select distinct 学习科目编号 
                       from 表1
                     where 学生编号=1)
      

  5.   

    顶这个..有SQL版的花..应该差不多
      

  6.   

    你的这个SQL语句查询出来的数据也不对呀
      

  7.   

    这表设计的确实有问题.......
    create proc test

     @id int 

    as select A.科目名称 
    from tb2 A 
    inner join (select distinct 学习科目编号 from tb1 where 学生编号=@id)B 
    on A.学习科目编号=B.学习科目编号 go 
    这个差不多
      

  8.   

    select distinct[学习科目编号] from 表1 where 学生编号=1 
    查询结果:
    s=1001   1002   1003   
    select 科目名称 from 表2 where 学生编号=1 and 学习科目编号='"+s+"' 
    查询结果:
    语文,数学,英语
      

  9.   

    select 学生编号,学习科目编号,学习成绩 from 表一 ,表二 where a.学生编号=b.学生编号 and a.学习科目编号=b.学习科目编号这样应该行。
      

  10.   

    既然第2个表是科目表  你还要什么学生编号,直接科目编号和科目名就行了。既然是两个表一起查,学生表有学生编号就OK了 一样能得到最后的结果。
    再用查询两个表的(join)语句就行了。select 表1.学生编号,表1.科目编,表2.科目名称 from 表1 inner join 表2 on 表1.科目编号=表2.科目编号
      

  11.   

    select 科目名称 from 表2 where 学习科目编号 in (select distinct[学习科目编号] from 表1 where 学生编号=1) and 学生编号=1
      

  12.   

    create proc test @id int 
    as select A.科目名称 
    from tb2 A 
    inner join (select distinct 学习科目编号 from tb1 where 学生编号=@id)B 
    on A.学习科目编号=B.学习科目编号 go 
      

  13.   

    没有人回答吗,我问这句SQL的存储过程怎么写,到C#代码里又怎么用?
      

  14.   

    MSSQL,还是Oracle,其他?
    先按Oracle贴一个
    select 科目名称 from table2 a,
    (select 学习科目编号 from table1 where 学生编号=1 Group by 学习科目编号 ) b
    Where a.学生编号 = 1 and a.学习科目编号=b.学习科目编号
      

  15.   

    再声明一遍:
    select 科目名称 from 表2 where 学习科目编号 in (select distinct[学习科目编号] from 表1 where 学生编号=1) and 学生编号=1 
    这个SQL的存储过程怎么写,到C#代码里又怎么用?
    SQL2000
      

  16.   

    建议楼主到SQL版发帖,那里有很多SQL高手,你的问题就不是问题!
      

  17.   

    CREATE PROCEDURE dbo.get
    ASSELECT 科目名称 FROM 表2 b
    INNER JOIN 表1 a
    ON a.id=b.idGO
      

  18.   

    顶~~~~ 表设计好了啥SQL语句都能容易写出来.
      

  19.   

    insert into table() value(select clo from table)原理就是这  不知道能否理解
      

  20.   

    select 科目名称 from 表2 where 学生编号=1 and 学习科目编号 in(
      select distinct[学习科目编号] from 表1 where 学生编号=1 )
      

  21.   

    select distinct 科目名称 from 表2 where 学生编号=1 and 学习科目编号 in (select distinct 学习科目编号 from 表1 where 学生编号=1)这个可以!
      

  22.   


    create procSubject 
    @id int 
    as select A.科目名称 
    from 表1 A 
    inner join (select distinct 学习科目编号 from 表2 where 学生编号=@id)B 
    on A.学习科目编号=B.学习科目编号 go 
      

  23.   

    select 科目名称 from 表2 where 学习科目编号 in (select distinct[学习科目编号] from 表1 where 学生编号=1)