Никак не могу решить задачу по SQL. В общем, есть вот такая база:
https://prnt.sc/o9517c
Текст задания: Определить страны, которые потеряли в сражениях все свои корабли.
Верный ответ:
https://prnt.sc/o9528v
Есть еще проверочная база, с другими данными.
Мое решение дает верный ответ по текущей базе, но не проходит по проверочной.
SELECT DISTINCT classes.country
FROM classes JOIN outcomes
ON classes.class=outcomes.ship
WHERE classes.country IN (SELECT DISTINCT classes.country
FROM classes JOIN outcomes
ON classes.class=outcomes.ship
WHERE outcomes.result='sunk')
Подскажите, где я могу ошибаться?
Если что, это 47 задача отсюда http://sql-ex.ru/learn_exercises.php
По-моему, в условии джойна как минимум, ты сравниваешь имя корабля с классом.
Там могут быть классы, которые не совпадают ни с одним именем корабля, а в одном классе могут быть корабли с разными именами, плюс еще мильен неудобных условий, например, один корабль мог ходить в бой много раз, но потопиться только в последнем.
Но я и сама не смогла, увидела, что как-то условий много, тестового материала мало, и бросила.
У меня тут тоже куча условий не учтена, а результат тестовая база выдает верный:
select distinct c.country from (
select o.ship tmp_ship_name, s.class tmp_class, o.battle, o.result
from outcomes o
left outer join ships s on o.ship = s.name
union
select o.ship tmp_ship_name, o.ship tmp_class, o.battle, o.result
from outcomes o
where o.ship not in (select distinct name from ships)
) u
join classes c on u.tmp_ship_name = c.class
where lower(u.result) not in ('ok', 'damaged')