5

私は 2 つのテーブルを持っています。1 つは StudentCerts と呼ばれ、電子メール (主キー) と証明書を含み、もう 1 つは 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

私がやろうとしているのは、特定の学生が参加していない証明書をすべて取得することです。たとえば、This@that.com は Programmer と English の両方の証明書に登録されており、特定の学生が登録されていない CertReqs のすべての証明書を返す SQL ステートメントを取得したいと考えています。 Econ、Art、および Journalism を返す必要があります。私はしばらくこれを手に入れるのに苦労していたので、どんな助けでも大歓迎です!!

4

5 に答える 5

1

ゲームでは少し遅れていますが、単純な方法でLEFT JOINこの問題を非常にうまく解決できます。

SELECT DISTINCT cr.Certificate 
FROM CertReqs cr
LEFT JOIN StudentCerts sc ON cr.Certificate = sc.Certificate AND sc.Email = 'This@that.com'
WHERE sc.Email IS NULL
于 2012-12-07T07:51:56.820 に答える
0
SELECT Certificate FROM `CertReqs` 

WHERE Certificate NOT in(
    SELECT Certificate 
    FROM `StudentCerts` 
    WHERE Email  = 'This@that.com' 
)
于 2012-12-07T07:44:57.053 に答える
0
SELECT DISTINCT A.* fROM 
(
SELECT DISTINCT EMAIL, CERTIFICATE fROM #StudentCerts A
CROSS JOIN #CertReqs B)  A
LEFT JOIN #StudentCerts B ON A.EmaiL = B.EMAIL AND B.CERTIFICATES = A.Certificate
WHERE B.EMAIL IS NULL
ORDER BY A.EMAIL 
于 2017-07-31T12:56:06.350 に答える