我想根据包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的新手,所以感谢您的耐心等待。
答案 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下面的用户提供的查询,它应该返回一些结果。