棘手的SQL加入查询

use*_*195 5 mysql sql join

我有两个表,一个名为StudentCerts,包含一个电子邮件(主键)和一个证书,另一个名为CertReqs,包含证书和课程.表的一部分可能如下:

     StudentCerts:                                 CertReqs:    
Email           Certificate             Certificate          Course
This@that.com      Programmer            Programmer           CS 101
This@that.com      English               Programmer           CS 202
A@B.com            Econ                  Programmer           CS 303
john@smith.com     Programmer            English              ENG 101
                                         English              ENG 102
                                         Econ                 ECON 102
                                         Econ                 ECON 304
                                         Art                  Art 101
                                         Art                  Art 102
                                         Journalism           J 101
                                         Journalism           J 202
Run Code Online (Sandbox Code Playgroud)

我想要做的是获得特定学生不属于的所有证书.例如,This@that.com注册了程序员和英语证书.我想得到一个SQL语句,它将返回CertReqs中特定学生未注册的所有证书.所以对于这个例子它应该归还经济,艺术和新闻.我一直在努力争取这个,所以任何帮助将不胜感激!

Emi*_*nov 2

SELECT cr.Certificate FROM CertReqs cr
WHERE cr.Certificate NOT IN (
    SELECT sc.Certificate FROM StudentCerts sc
    WHERE sc.Email = 'This@that.com'
);
Run Code Online (Sandbox Code Playgroud)

该查询几乎相当于要求:“我想要所有 CertReqs,但该学生不在其中”。