2014-07-05 24 views
0

嗨,我在MYSQL中的一點點代碼掙扎。我試圖讓代碼正常工作。答案是正確的,但它顯示的是完全錯誤的列。任何建議或方向都會很棒。我看過類似的帖子,但這些似乎是插入數據庫。這是爲了從mysql內部顯示。MYSQL代碼正在創建顯示重複行

我的代碼---

SELECT 
    b.booking_id AS Booking,  
    b.hotel_no AS Hotel, 
    b.dateFrom AS Arrive, 
    b.dateTo AS Departing, 
    r.price AS Cost, 
    DATEDIFF(`dateTo`,`dateFrom`)-1 AS Duration, 
    DATEDIFF(`dateTo`,`dateFrom`) * r.price - r.price AS 'Total Cost' 
    FROM BOOKING AS b 
    LEFT JOIN 
    ROOM AS r ON b.hotel_no = r.hotel_code 
    WHERE b.hotel_no = 2; 


Database 'Booking' 

booking_id guest_no dateFrom  dateTo room_no hotel_no  
    1   1  2014-06-30 2014-07-03  1  1 
    2   2  2014-06-30 2014-07-07  1  2 
    3   3  2014-06-30 2014-07-02  2  2 

Database 'Room' 

room_id  room  hotel_no  type   price 
    1   1   1  Twin Share   185 
    2   2   1  Deluxe    330 
    3   1   2  Deluxe    250 
    4   2   2  Penthouse Suite 500 

Answer from Mysql. 

Booking Hotel Arrive  Departing Cost Duration Total Cost 
2   2 2014-06-30 2014-07-07 250  6   1500 
3   2 2014-06-30 2014-07-02 250  1   250 
2   2 2014-06-30 2014-07-07 500  6   3000 
3   2 2014-06-30 2014-07-02 500  1   500 

正如你可以看到我有是它在總成本等方面產生正確的結果,但它被複制到達的問題 - 出發部分。有什麼建議可以幫助解決這個問題?

謝謝

格雷格

回答

0

這個添加到你的查詢:

AND b.room_no = r.room_id 
在JOIN語句

,所以:

LEFT JOIN 
ROOM AS r ON b.hotel_no = r.hotel_code 
AND b.room_no = r.room_id 

的加入是匹配每個房間,每個房間(2×2),所以你看到的4個結果。給這個動搖。

0

你必須

JOIN ON b.hotel_no = r.hotel_code AND b.room_no = r.room

,(檢查是否有正確的字段名),否則將計算所有所有客房爲每個單獨的預訂可能產生的費用,因爲它是在做你最後的結果。當你不使用主鍵的加入,你應該使用其他候選鍵(酒店,房間)。

請注意,您使用LEFT JOIN,你可能會得到空值,如果預訂不具備適當的相關房間。