有两个表
表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:
学生编号 学习科目编号 学习成绩
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很烂,请大家见谅!
select 科目名称 from 表2 where 学习科目编号 in (select distinct[学习科目编号] from 表1 where 学生编号=1)
asselect A.科目名称
from tb2 A
inner join (select distinct 学习科目编号 from tb1 where 学生编号=@id)B
on A.学习科目编号=B.学习科目编号go
你试一下
select 科目名称
from 表2
where 学生编号=1
and 学习科目编号=(select distinct 学习科目编号
from 表1
where 学生编号=1)
create proc test
(
@id int
)
as select A.科目名称
from tb2 A
inner join (select distinct 学习科目编号 from tb1 where 学生编号=@id)B
on A.学习科目编号=B.学习科目编号 go
这个差不多
查询结果:
s=1001 1002 1003
select 科目名称 from 表2 where 学生编号=1 and 学习科目编号='"+s+"'
查询结果:
语文,数学,英语
再用查询两个表的(join)语句就行了。select 表1.学生编号,表1.科目编,表2.科目名称 from 表1 inner join 表2 on 表1.科目编号=表2.科目编号
as select A.科目名称
from tb2 A
inner join (select distinct 学习科目编号 from tb1 where 学生编号=@id)B
on A.学习科目编号=B.学习科目编号 go
先按Oracle贴一个
select 科目名称 from table2 a,
(select 学习科目编号 from table1 where 学生编号=1 Group by 学习科目编号 ) b
Where a.学生编号 = 1 and a.学习科目编号=b.学习科目编号
select 科目名称 from 表2 where 学习科目编号 in (select distinct[学习科目编号] from 表1 where 学生编号=1) and 学生编号=1
这个SQL的存储过程怎么写,到C#代码里又怎么用?
SQL2000
ASSELECT 科目名称 FROM 表2 b
INNER JOIN 表1 a
ON a.id=b.idGO
select distinct[学习科目编号] from 表1 where 学生编号=1 )
create procSubject
@id int
as select A.科目名称
from 表1 A
inner join (select distinct 学习科目编号 from 表2 where 学生编号=@id)B
on A.学习科目编号=B.学习科目编号 go