2015-03-18 281 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下面的用戶提供的查詢,它會返回一些結果。