2016-06-03 20 views
-1

Die Problemanweisung für die SQL-Abfrage besteht darin, alle Piloten zu finden, die die in der Plane-Tabelle aufgeführten Ebenen fliegen können. Also haben wir im Grunde eine Pilot-Tabelle, die zwei Spalten hat, nämlich Pilot-Namen und die Ebenen, die sie fliegen können, und die zweite Tabelle, die Ebenen-Tabelle genannt wird, die nur eine Spalte hat, nämlich die Planes-Spalte. Also müssen wir alle Piloten finden, die alle Ebenen fliegen können, die in der Ebenen-Spalte der Ebenentabelle aufgeführt sind. Ich weiß, dass einer der Wege ist, über relationale Teilung vorzugehen, aber gibt es einen anderen Weg, dies zu lösen? Das Tabellenschema lautet wie folgt: Pilot (Pilot_Name, Ebenen) Ebene (Ebenen) Das zeigt die Pilot-Tabelle besteht aus 2 Spalten und die Ebene-Tabelle besteht aus einer einzelnen Spalte. Der Code unten ist die Lösung für das Problem gesetzt Divison mit:Lösen einer SQL-Abfrage, die eine Division durch eine andere Methode einbezieht

SELECT DISTINCT pilot_name 
FROM PilotSkills AS PS1 
WHERE NOT EXISTS 
    (SELECT * 
     FROM Hangar 
    WHERE NOT EXISTS 
      (SELECT * 
       FROM PilotSkills AS PS2 
      WHERE (PS1.pilot_name = PS2.pilot_name) 
       AND (PS2.plane_name = Hangar.plane_name))); 

Diese Abfrage gibt das gewünschte Ergebnis. Aber ich habe mich gefragt, ob es eine andere Methode gibt, um diese Frage zu lösen, ohne das oben erwähnte Konzept der Mengenteilung zu verwenden.

+0

Sie Titel, Sie Frage und Ihr Code scheint nicht richtig .. Verwandte .. zeigen Sie eine ordnungsgemäße bd-Schema und Beispieldaten für Ihr Verständnis verstehen – scaisEdge

Antwort

0

Ich würde dies mit Aggregation tun:

select pilot_name 
from pilotskills 
group by pilot_name 
having count(*) = (select count(*) from planes); 

Wenn ein Plan für einen bestimmten Piloten in den Fähigkeiten Tabelle zweimal aufgeführt werden könnte, die having Klausel sollte sein:

select pilot_name 
from pilotskills 
group by pilot_name 
having count(distinct plane_name) = (select count(*) from planes); 
+0

Die Flugzeuge können mehr als einmal in der Pilotenliste aufgeführt werden, da mehrere Piloten die gleichen Flugzeuge aber fliegen können Für einen Piloten gibt es keine doppelte Val ue der gleichen Ebene – RAGHAV

+0

Ich habe versucht, Ihre Anfrage Gordon gibt es nicht das gewünschte Ergebnis. Es zeigt nur den Namen des ersten Piloten unabhängig von den in der Planes-Tabelle – RAGHAV

+0

@RAGHAV aufgelisteten Ebenennamen. . . Sind Sie sicher, dass Sie die 'Gruppe von' haben? –