我创建了以下表格;
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语句并将两个节号的结果一起显示
任何人都可以帮助我并告诉我哪里出错了。我尝试了所有各种连接类型,但仍然没有结果。
谢谢
答案 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
将产生左右表的笛卡尔积,然后加上任何一侧的任何空(不匹配)行 - 这个结果通常不是很有用(有些非常有用的例外,我敢肯定。)