2016-10-04 4 views
2
existieren

(Wenn dieser Titel Frage falsch ist, bitte jemand das Problem beheben ..)MYSQL Wie Wert aus anderen Tabelle wählen, die nicht

Ich habe drei Tabellen wie diese

TABLE SCHOOL 

--------+--------+---- 
No. |NAME |CLASS | 
--------+--------+---- 
1. |Batman |math | 
--------+--------+---- 
2. |Batman |biology| 
--------+--------+---- 
4. |Batman |karate | 
--------+--------+---- 
5. |Superman|biology| 
--------+--------+---- 
6. |Superman|karate | 
--------+--------+---- 
7. |Superman|swim | 
--------+--------+---- 

TABLE SUPERHERO 
--------+----- 
No. |NAME | 
--------+----- 
1. |Batman | 
--------+----- 
2. |Superman| 
--------+----- 

TABLE CLASS 

--------+----- 
No. |CLASS | 
--------+----- 
1. |Math | 
--------+----- 
2. |biology | 
--------+----- 
3. |karate | 
--------+----- 
4. |Swim | 
--------+----- 

Die Frage ist, : Wie man auswählt, dass Batman nicht Schwimmunterricht genommen hat, und Supermann hat nicht Mathematikunterricht genommen? wie folgt aus:

(Output table that I want) 
+--------+-------+ 
|NAME |CLASS | 
+--------+-------+ 
|Batman |swim | 
+--------+-------+ 
|Superman|math | 
+--------+-------+ 

Antwort

2

Sie müssen CROSS JOINSUPERHERO und CLASS Tabelle zuerst, um alle möglichen Kombinationen von SUPERHERO & CLASS zu bekommen.

machen später eine linke zwischen dem obigen Quer verknüpften Tabelle t und SCHOOL Tisch kommen.

schließlich die Ergebnisse Filterung in der WHERE Klausel durch Überprüfung SCHOOL Eintrag NULL stellt sicher, dass diese Kombinationen (superhero, class) eigentlich gar nicht existieren in SCHOOL Tabelle

SELECT 
t.NAME, 
t.CLASS 
FROM 
(
    SELECT 
    SH.NAME, 
    C.CLASS 
    FROM SUPERHERO SH 
    CROSS JOIN CLASS C 
) AS t 
LEFT JOIN SCHOOL S ON t.NAME = S.NAME AND t.CLASS = S.CLASS 
WHERE S.NO IS NULL 
+0

vielen Dank entspricht, es ist Arbeit :) –

Verwandte Themen