Перечислите грузовики, которые использовались только для перевозки фруктов - PullRequest
0 голосов
/ 11 октября 2019

Предположим, база данных со схемой

TRUCK  (license-plate, maker, model, year, mileage, max-load)
DRIVER (driver-id, name, age, address, license)
TRIP   (license-plate, driver-id, date, origin, destination, miles, cargo, cost)

Напишите реляционную алгебру и SQL, чтобы перечислить номерной знак грузовиков, которые использовались только для перевозки фруктов.

Я придумаю решениегде

Реляционная алгебра:

enter image description here

SQL:

enter image description here

не правильный ответ. Почему это?

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Одно из решений - проверить, отправлял ли грузовик фрукты и груз другого типа, используя оператора EXISTS:

SELECT license-plate
FROM truck
WHERE EXISTS (
    SELECT 1
    FROM trip
    WHERE trip.license-plate = truck.license-plate
    AND trip.cargo = 'fruit'
)
AND NOT EXISTS (
    SELECT 1
    FROM trip
    WHERE trip.license-plate = truck.license-plate
    AND trip.cargo <> 'fruit'
)
0 голосов
/ 11 октября 2019

Я бы использовал агрегацию. Ваш запрос требует только одну таблицу:

select license_plate
from trip
group by license_plate
having min(cargo) = max(cargo) and
       min(cargo) = 'fruit';

Ваш ответ неверен, потому что он возвращает поездки, где груз является фруктом. Однако он не учитывает другие поездки для того же грузовика, где груз не может быть фруктовым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...