SQL 查询帮助

SQL help on query

我想查询去西班牙度假的最便宜套餐,给定包裹 ID。在执行我的查询时,我只是坚持如何去做。我需要有关 'package' table 的值中包含哪些内容的帮助,我还需要有关如何呈现查询的帮助。

这里是 table:

    USE [zachtravelagency]
    CREATE TABLE package (
        [packageID] INTEGER NOT NULL IDENTITY (1,1) PRIMARY KEY, 
        [hotelID] INTEGER FOREIGN KEY REFERENCES hotels NOT NULL, 
        [excursionID] INTEGER FOREIGN KEY REFERENCES excursions NOT NULL, 
        [transportID] INTEGER FOREIGN KEY REFERENCES transport NOT NULL, 
        [flightID] INTEGER FOREIGN KEY REFERENCES flight NOT NULL, 

    );

这是列,后面跟着一些 NULL 值,因为我不确定要输入什么。

    Insert Into package (packageID, hotelID, excursionID, transportID, flightID)
    Values (1, '', '', '', '')

这里是输入数据到我的例子'hotel' table(这是一行的例子)

    Insert Into hotels (hotelID, hotelName, numRooms, location, totalCost, rating)
    Values (1, 'Supreme Oyster Resort & Spa', '255', 'Spain', '250', '4')

我是 SQL 的新手,感谢您的耐心等待。

显然您总共需要创建五个 table。由于外键,您必须最后在包 table 中插入数据。假设以上都已完成,你现在要查询。

如果您获得了 packageID,那么您已经有了答案。我不确定你的意思。如果您想要在西班牙拥有酒店的套餐的最低费用,请执行以下操作:

select min(h.totalCost)
from package as p inner join hotels as h on h.hotelID = p.hotelID
where h.location = 'Spain'

如果您想要在西班牙以最低价格入住酒店的套餐,请试试这个。它可以匹配多个:

select * from package where hotelID in (
    select hotelID from hotels where totalCost = (
        select min(h.totalCost)
        from package as p inner join hotels as h on h.hotelID = p.hotelID
        where where p.packageID = ? and h.location = 'Spain'
    )
)

很难帮助您确定应该在包 table 中输入哪些数据。它可以是任何东西。只要数据的类型与您为每列提供的类型相同。由于 Package table 中的所有列都是整数,因此您可以添加任何数字。不过不要把它们放在 '' 中。它使它们成为字符串。例如。我将编写以下内容以将数据插入包 table:

Insert Into package (packageID, hotelID, excursionID, transportID, flightID)
Values (1, 777, 7777, 4444) -- Doesn't matter what value you put, unless you have other Hotel, Excursion, Transport and Flight table which contains Id as primary key, then you need to use that.

同样,您可以在两个 table 中插入更多记录。之后,使用 shant00 下面的用户提供的查询,它应该 return 你得到一些结果。

首先,对于 'package' 的插入语句,您没有指定 packageId,因为它是一个标识列。相反,它应该看起来像这样

Insert Into package (hotelID, excursionID, transportID, flightID)
Values (1, 54, 43, 23)

然后到 运行 一个 SELECT 查询找到去西班牙的最便宜的包裹你必须加入你的酒店,短途旅行,交通和航班 table 包裹,和总和每个 table 的总成本。

示例:

SELECT p.*, (h.totalCost + e.totalCost + t.totalCost, f.totalCost) as 'Total Package Cost' FROM Package p
    INNER JOIN hotel h ON h.hotelId = p.hotelId
    INNER JOIN excursion e ON e.excursionId = p.excursionId
    INNER JOIN transport t ON t.transportId = p.transportId
    INNER JOIN flight f ON f.flightId = p.flightId
WHERE h.location = 'Spain'
ORDER BY (h.totalCost + e.totalCost + t.totalCost, f.totalCost) ASC

您最便宜的包裹将首先列出。如果你只想要最便宜的那么你可以使用 SELECT TOP 1

此查询还假定每个 table 都有一个 totalCost 列。