Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要设计查询或MS SQL程序_Sql_Sql Server 2005 - Fatal编程技术网

需要设计查询或MS SQL程序

需要设计查询或MS SQL程序,sql,sql-server-2005,Sql,Sql Server 2005,假设我有两张桌子 学生表: studentID, lname, fname 测试表: testid, studentid, testname, testdate 学生可以参加测试A和测试B 现在,我想设计一个查询或过程,如果学生同时参加了测试a,则可以显示来自student表和test_表的数据以及条件 只有考试信息需要与学生信息一起显示,否则应显示所有参加的考试信息,或者如果没有考试,则不显示任何考试信息。我的理解是,如果学生同时参加了两项考试,则您可以转到“显示学生信息”和“考试信息”,

假设我有两张桌子

学生表:

studentID, lname, fname
测试表:

testid, studentid, testname, testdate
学生可以参加测试A和测试B

现在,我想设计一个查询或过程,如果学生同时参加了测试a,则可以显示来自student表和test_表的数据以及条件


只有考试信息需要与学生信息一起显示,否则应显示所有参加的考试信息,或者如果没有考试,则不显示任何考试信息。

我的理解是,如果学生同时参加了两项考试,则您可以转到“显示学生信息”和“考试信息”,否则将使用学生信息进行考试。 如果我的理解正确,请尝试此查询

select st.*,tt.* 
from student_table st 
inner join test_table tt 
    on st.sid = tt.sid 
    and tt.sid in (select sid 
                   from test_table 
                   where testname ='testA' 
                  intersect 
                   select sid 
                   from test_tablewhere testname ='testB') 
    and testname='testA'
union all
select st.*,tt.* 
from student_table st 
inner join test_table tt 
    on st.sid = tt.sid
    and tt.sid not in (select sid 
                       from test_table 
                       where testname ='testA' 
                      intersect 
                       select sid 
                       from test_table 
                       where testname ='testB') ;

我建议你在考试和学生之间建立一种适当的多对多关系。如果你不知道怎么做的话,我听说过这本书的好东西,《为凡人设计数据库》。