2015-03-19 82 views
1

我試圖執行查詢以查找到西班牙的最便宜的軟件包。SQL WHERE多列

我遇到了問題,我的'Where h.location ='西班牙'。我需要where函數來方便我的其他專欄。例如: - e.location,t.location和f.location。 'all'='西班牙'

 SELECT p.*, (h.totalCost + e.totalCost + t.totalCost + f.totalCost) as 'Total Package Cost' FROM Package p 
     INNER JOIN hotels h ON h.hotelId = p.hotelId 
     INNER JOIN excursions 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 

我該如何解決這個問題?

+0

很多表我通常會加入一個公用表表達式,然後將其選中。 – cchamberlain 2015-03-19 05:54:57

回答

2

我會建議做這種方式

WHERE h.location = 'Spain' 
AND e.location = h.location 
AND t.location = h.location 
AND f.location = h.location 

,所以如果你想改變「西班牙」的變量(我假設它是一個變量),你只需要在你的查詢中包含一個地方。

+0

謝謝你,看起來更好。 – user3545833 2015-03-19 01:34:10

+1

請注意,關於您的查詢的更多評論。你並不需要每次聲明'inner join';這通常是假設的。你可以使用'join',如'JOIN hotels on h.hotelId = p.hotelId'。另外,由於您爲您的變量創建了別名,在您的order by statement中,您可以使用'按總包成本'排序';你不需要重新計算這個變量。 – nomistic 2015-03-19 02:19:28

2

如果他們都能夠平等地「西班牙」,然後只需將其添加到WHERE子句和

WHERE h.location = 'Spain' 
    AND e.location = 'Spain' 
    AND t.location = 'Spain' 
    AND f.location = 'Spain'