首页 > 解决方案 > 列出仅用于运送水果的卡车

问题描述

假设一个具有模式的数据库

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,列出仅用于运载水果的卡车的车牌。

我想出了一个解决方案

关系代数:

在此处输入图像描述

SQL:

在此处输入图像描述

不是正确答案。这是为什么?

标签: sqlrelational-algebra

解决方案


一种解决方案是使用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'
)

推荐阅读