Ich befolge die Übungen in http://www.sql-ex.ru/learn_exercises.php.sql-ex.ru wählen Anweisung Übung 51
In Aufgabe 51 fragen sie: "Finden Sie die Namen der Schiffe mit der größten Anzahl von Geschützen unter allen Schiffen mit der gleichen Verschiebung (einschließlich Schiffe in der Ausgangstabelle)."
Dies ist mein Code, den ersten gesehen db geht, aber nicht passiert den zweiten, unsichtbaren, db (der Fehler - „weniger von 3“):
with t1 as
(select displacement, max(numguns) 'guns' from classes group by displacement),
t2 as
(select class from classes, t1 where classes.displacement = t1.displacement and classes.numguns = t1.guns)
select name from ships, t2 where ships.class = t2.class
union
select ship from outcomes, t2 where outcomes.ship = t2.class
Die Logik Ich benutze ist, dass die einzige Tabelle in der db, die Verschiebung und Anzahl von Waffen enthält, die Klassen ist, und so t1 und t2 die Klassennamen extrahiert und ich dann einfach die Namen, die zu diesen Klassen gehören, aus der Tabelle ships und ends bekommt.
Kann nicht sehen, warum es einen Fehler geben sollte.
EDIT: ein Scheck für Nullwerte in den Klassen hinzugefügt, und ich erhalte einen neuen Fehler auf dem zweiten unsichtbaren db - „Datenkonflikt (11)“:
with t1 as
(select displacement, max(numguns) 'guns' from classes group by displacement),
t2 as
(select class from classes, t1 where (classes.displacement = t1.displacement or classes.displacement is null) and (classes.numguns = t1.guns or classes.numguns is null))
select name from ships, t2 where ships.class = t2.class
union
select ship from outcomes, t2 where outcomes.ship = t2.class
das funktioniert. Ich denke, vielleicht müssen Sie die Schiffe und die Ergebnisse verbinden, bevor Sie sich den Klassen anschließen und Verschiebungen und Numguns finden, um auch Namen von Schiffen aus der Ergebnistabelle einzubeziehen, selbst wenn sie keine Werte in Klassen haben. d. h. nach dem Verbinden mit den Klassen sind ihre Werte für Verschiebung und Anzahl an Nullen "Null". Hab ich recht? –
@DavidRefaeli gibt es eine andere Logik dahinter, siehe Erklärung in meinem aktualisierten Beitrag – Vasily