有关查询的SQL帮助

时间:2015-03-18 21:14:22

标签: sql sql-server insert

我想根据包ID为西班牙度假创建一个最便宜的包裹。我只是坚持在执行查询时如何处理它。我需要帮助我们了解包含在'包中的内容。表和我还需要有关如何呈现查询的帮助。

这是表格:

    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, '', '', '', '')

以下是将数据输入我的酒店' table(这是一行的示例)

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

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

3 个答案:

答案 0 :(得分:2)

显然你需要创建总共五个表。由于外键,您必须最后在packages表中插入数据。让我们假设所有这些都已完成,您现在想要查询。

如果您获得了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'
    )
)

答案 1 :(得分:2)

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

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

然后运行SELECT查询以找到西班牙最便宜的包裹,你必须加入你的酒店,游览,运输和航班表,然后从每个表中加总totalCost。

示例:

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

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

答案 2 :(得分:1)

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

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.

同样,您可以在两个表中插入更多记录。之后,使用shawnt00下面的用户提供的查询,它应该返回一些结果。