2015-03-18 143 views
1

我想创建一个查询最便宜的包到假期到西班牙,给定包ID。我只是坚持如何去执行我的查询。我需要帮助包含'包'表的值,并且我还需要关于如何呈现查询的帮助。SQL帮助查询

下面是表:

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

这里是进入的一个例子数据到我的'酒店'表(这是一个例子)

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

我是新来的SQL,所以感谢您的耐心。

+0

这功课吗? – jbrahy 2015-03-18 21:18:00

+0

不,这是我大学模块的一部分,我真的被困在如何去做! – user3545833 2015-03-18 21:19:42

回答

2

首先,对于“一揽子” insert语句,你不要,因为它是一个标识列指定包标识。相反,它应该是这个样子

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

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

如果你给出的包标识,那么你已经有了答案。我不确定你的意思。如果您希望在西班牙一酒店包的最低成本则做到这一点:

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' 
    ) 
) 
+0

好的队友,精彩。我将如何处理Package表的所有列中具有最低值的包。例如,酒店,短途旅行,交通和航班? – user3545833 2015-03-18 21:34:14

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下面的用户提供的查询,它会返回一些结果。