Return 一个 table 的价值,过滤那些从未被分配给另一个人的人

Return a table of value by filtering those who have never been assigned to another

在这里快速提问。我有一个包含几张表的数据库,数量不多,但它们与参考键相关联。这是我的问题:

我可以很容易地写出请求,但我似乎找不到它背后的正确逻辑。

这是我尝试过的:

SELECT g.sigil
FROM   GroupCourse g JOIN Professor p
       ON g.profCode = p.profCode
WHERE  p.name != 'Velvet' AND p.name != 'Moise'

它正常工作,但如果我也有其他老师教这门课,比方说 TRX1277,它只会删除 VelvetMoise 教的那个。不是所有的人。我只想展示那些没有被那两个教过的人。

Table定义:

小组课程

教授

目前,我得到这个:

-------
SIGIL
-------
MGT1130
JPR6790
TRX1277
POU3333

Moise 没有注册课程。但是 Velvet 有 2 个。 MGT1130 和 POU3333。问题是,很少有其他老师也开设这些课程。因此,为什么我需要想办法让它看起来像这样:

-------
SIGIL
-------
JPR6790
TRX1277    

我知道我遗漏了一件小东西,但我找不到它:(

@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')
 )