Здравствуйте. Не затруднит вас подсказать как правильно решить задачу, взятую из
sql-ex.ru ?
т.е. мне не нужно полностью готовое решение,
хотелось-бы чтобы подсказали, как правильно разбить эту задачу на подзадачи, чтобы решить её.
База данных:
Рассматривается БД кораблей, участвовавших во второй мировой войне. Имеются следующие отношения:
Classes (class, type, country, numGuns, bore, displacement)
Ships (name, class, launched)
Battles (name, date)
Outcomes (ship, battle, result)
Корабли в «классах» построены по одному и тому же проекту, и классу присваивается либо имя первого корабля,
построенного по данному проекту, либо названию класса дается имя проекта, которое не совпадает ни с одним из кораблей в БД.
Корабль, давший название классу, называется головным.
Отношение Classes содержит имя класса, тип (bb для боевого (линейного) корабля или bc для боевого крейсера),
страну, в которой построен корабль, число главных орудий, калибр орудий (диаметр ствола орудия в дюймах) и водоизмещение
( вес в тоннах). В отношении Ships записаны название корабля, имя его класса и год спуска на воду.
В отношение Battles включены название и дата битвы, в которой участвовали корабли,
а в отношении Outcomes – результат участия данного корабля в битве (потоплен-sunk, поврежден - damaged или невредим - OK).
Замечания.
1) В отношение Outcomes могут входить корабли, отсутствующие в отношении Ships.
2) Потопленный корабль в последующих битвах участия не принимает.
Задача:
Найдите названия кораблей, имеющих наибольшее число орудий среди всех имеющихся кораблей такого же водоизмещения
(учесть корабли из таблицы Outcomes).
пытался сделал так:
select t1.name from
(
select s.name from classes c join ships s on c.class=s.class
union
select o.ship from outcomes o join classes c on c.class=o.ship
) as t1
where exists(
select s.name, c.class, c.numGuns, c.displacement from classes c join ships s on c.class=s.class
union
select o.ship, c.class, c.numGuns, c.displacement from outcomes o join classes c on c.class=o.ship
where c.displacement = t1.displacement
and t1.numGuns > c.numGuns
)
но это не правильно.
в php как-то полегче, там можно прощупать каждую переменную в цикле, что в ней находится