Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите решить задачу 14 по DML  [new]
belas88
Member

Откуда:
Сообщений: 2
Доброго времени суток, комрады! Прошу сильно тапками не кидать, мол сам должен решать и прочее. Дело в том, что третий день бьюсь с задачей, и в результате имею "Ваш запрос вернул правильные данные на основной базе, но не прошел тест на проверочной базе. * Неверное число записей (меньше на 1)". Вот хоть стой, хоть падай, решал задачу разными способами - ответ один и тот же..

Рассматривается БД кораблей, участвовавших во второй мировой войне. Имеются следующие отношения:
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) Потопленный корабль в последующих битвах участия не принимает.


Вот мой запрос:

delete
from Classes
where class in (select c.class
from Classes c
inner join ships s
on s.class = c.class
group by c.class
having count(s.name) < 3
union
select c.class
from Classes c
inner join Outcomes o
on c.class = o.ship
group by c.class
having count(o.ship) < 3
)

Что тут не так? Подскажите...

P.S. Причем, в данном запросе не выполняется еще одно условие (для правильного решения)..По сути мне нужно написать еще один UNION для таблицы Classes, но в таком случае я получаю уже 4 несовпадения данных...
Благодарю за внимание!
18 апр 12, 09:28    [12430999]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачу 14 по DML  [new]
iljy
Member

Откуда:
Сообщений: 8711
belas88,

задачи sql-ex надо решать самостоятельно, если что непонятно - обращаться в поддержку сайта.
18 апр 12, 09:44    [12431054]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачу 14 по DML  [new]
f070214
Member

Откуда:
Сообщений: 35
А в чем, собственно, заключается задача, что Вы ожидаете от своего запроса? Здорово было бы также, если бы Вы отразили примерные данные для таблиц.
18 апр 12, 09:57    [12431137]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачу 14 по DML  [new]
belas88
Member

Откуда:
Сообщений: 2
Простите, совсем забыл написать условие...
"Удалите классы, имеющие в базе данных менее трех кораблей (учесть корабли из Outcomes)."
18 апр 12, 09:59    [12431144]     Ответить | Цитировать Сообщить модератору
 Re: Помогите решить задачу 14 по DML  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
iljy
задачи sql-ex надо решать самостоятельно, если что непонятно - обращаться в поддержку сайта.
18 апр 12, 10:01    [12431164]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить