选择,加入和两个Where子句 - 结果选项卡为空

时间:2015-10-12 08:47:53

标签: sql-server-2012

我创建了以下表格;

CREATE TABLE Section(
SectionNo int NOT NULL PRIMARY KEY,
Semester varchar(7) NOT NULL,
CourseID varchar(8) NOT NULL FOREIGN KEY REFERENCES Course(CourseID),)

CREATE TABLE Registration (
StudentID int NOT NULL FOREIGN KEY REFERENCES Section(StudentID)
StudentNo int NOT NULL FOREIGN KEY REFERENCES Section(SectionNo)
Semester varchar(7) NOT NULL,)

我的部分表格看起来像

SectionNo     Semester    CourseID
2714           I-2008      ISM 4212
2715           I-2008      ISM 4930

我的注册表似乎是

StudentID     SectionNo     Semester
38214          2714          I-2008
54907          2714          I-2008
54907          2715          I-2008

我现在必须创建一个视图,以显示哪些学生在Section No 2714和2715中注册。这些部分编号2714和2715指的是另一个表中的课程名称,但我不需要为此目的或者我可以加入三个以后。

我按如下方式创建了我的查询

SELECT R.StudentID, S.SectionNo, S.CourseID
FROM Registration AS R
FULL OUTER JOIN Section AS S
ON R.SectionNo = S.SectionNo
WHERE S.CourseID = 'ISM 4212' AND 
S.CourseID = 'ISM 4930';

我的查询结果为空,如下所示;

Results   Messages
  StudentID   SectionNo   CourseID
  No results shown

但是我知道在上表的结果选项卡中我应该有3行。如果我只使用一个where子句执行select查询(即分别使用sectionNo 4212和4930的where子句进行select查询,结果会显示出来。但是我希望做一个select语句并将两个节号的结果一起显示

任何人都可以帮助我并告诉我哪里出错了。我尝试了所有各种连接类型,但仍然没有结果。

谢谢

2 个答案:

答案 0 :(得分:2)

只需更改AND in:

  WHERE S.CourseID = 'ISM 4212' AND 
  S.CourseID = 'ISM 4930';

到OR:

WHERE S.CourseID = 'ISM 4212' OR 
      S.CourseID = 'ISM 4930';

其他一切都还可以。

答案 1 :(得分:0)

WHERE S.CourseID = 'ISM 4212' AND 
S.CourseID = 'ISM 4930';

您正在过滤S.CourseID同时等于2个不同值的行。当然,它不可能两者兼而有之。所以,你没有结果。

您的意思是使用or ......?甚至是S.CourseID in ('list', 'of', 'possible', 'matches')

此外,可能没有立即相关,但如果您只想在匹配项上join,则应使用inner join。使用full outer join将产生左右表的笛卡尔积,然后加上任何一侧的任何空(不匹配)行 - 这个结果通常不是很有用(有些非常有用的例外,我敢肯定。)