这里的快速问题。我有一个数据库,其中有几个表,但不多,但它们与参考键链接。这是我的问题:
sigil
尚未由名称为'Velvet' , 'Moise'
的老师讲授的课程我可以轻松地编写请求,但似乎找不到正确的逻辑。
这是我尝试过的:
SELECT g.sigil
FROM GroupCourse g JOIN Professor p
ON g.profCode = p.profCode
WHERE p.name != 'Velvet' AND p.name != 'Moise'
它的工作原理与应该的一样,但是如果我也有其他老师在教这门课程,比如说TRX1277
,它只会删除Velvet
和Moise
所教的课程。不是所有的人。我只想显示那些没有被那些2教过的人。
表定义:
GroupCourse :
Primary keys : sigil, codeSession
sigil: CHAR
noGroup : INTEGER
sessionCode: INTEGER
profCode: CHAR
教授:
Primary key : profCode
profCode: VARCHAR
firstName: VARCHAR
lastName: VARCHAR
此刻,我得到了:
-------
SIGIL
-------
MGT1130
JPR6790
TRX1277
POU3333
Moise没有注册课程。但是Velvet有2。MGT1130和POU3333。问题是,很少有其他老师也有那些课程。因此,为什么我需要找到一种使其看起来像这样的方法:
-------
SIGIL
-------
JPR6790
TRX1277
我知道我想念一件事,但我找不到它((
答案 0 :(得分:1)
@ fa06的解决方案很接近,但是排除了教授教授的行,而不是任何一位教授从未教过的课程。
SELECT g.sigil
FROM GroupCourse g
WHERE not exists (
select 1
FROM GroupCourse g1
JOIN Professor p ON g1.profCode = p.profCode
where g.sigil=g1.sigil
and p.name in('Velvet','Moise')
)