2014-09-21 50 views
0

我不明白這裏發生了什麼,我有一段代碼能夠按預期完美工作。但是,一旦我修改了另一張桌子,我開始獲取不正確的額外數據。加入新表格時出現錯誤的數據

SELECT g.Name 
    , b.roomNo 
    , b.From 
    , b.To 
    FROM Booking b 
    JOIN Guest g ON g.No = b.gNo 
    WHERE b.hNo = 1 AND b.From <= '10-01' 
     AND (b.To IS NULL OR b.To >= '10-01'); 

我得到這個和所有這些信息是正確的,我已經手動驗證它。

NAME  ROOMNO FROM TOO 
--------- ------ ----- -----         
Bob   5 09-27 10-04         
Joe   4 09-21 10-24         
Frank   7 09-30  
Peter   3 09-22 10-02 

後,我將它修改爲:

SELECT g.Name 
    , b.roomNo 
    , r.price --<-- new 
    , b.From 
    , b.To 
    FROM Booking b 
    JOIN Guest g ON g.No = b.gNo 
    JOIN Room r ON r.roomNo = b.roomNo --<-- new 
    WHERE b.hNo = 1 AND b.From <= '10-01' 
     AND (b.To IS NULL OR b.To >= '10-01'); 

這是我回來....現在我檢查,我知道一個事實,即每個房間只有一個價格,但我我正在爲每一個收回兩個價格。我無法理解這一點。

NAME  PRICE ROOMNO FROM TOO 
--------- ----- ------ ----- -----         
Bob   55  5 09-27 10-04 -- <--correct price 
Bob   60  5 09-27 10-04         
Joe   55  4 09-21 10-24 -- <--correct price 
Joe   60  4 09-21 10-24         
Frank  90  7 09-30  -- <--correct price 
Frank  100  7 09-30           
Peter  55  3 09-22 10-02 -- <--correct price 
Peter  60  3 09-22 10-02 

這可能有助於太....

SELECT b.roomNo 
FROM Booking b 
WHERE b.hNo = 1; 

提供了正確的10個結果:

ROOMNO                  
------                  
    7                  
    5                  
    5                  
    5                  
    1                  
    3                  
    4                  
    7                  
    2                  
    3 

但是....

SELECT b.roomNo 
    FROM Booking b 
    JOIN Room r ON b.roomNo = r.roomNo 
    WHERE b.hNo = 1; 

給出結果80 ...

+0

'Room'中可能有重複的房間號?否則,你能否爲所有顯示問題的表添加一些示例數據? – 2014-09-21 06:06:36

+0

不,我也證實了這一點..每個房間只出現一次 – ZeroScifer 2014-09-21 06:37:38

回答

1

確定後,我不想知道多少個小時,而且這很簡單。

JOIN Room r ON r.roomNo = b.roomNo AND b.hotelNo = r.hotelNo 

這只是少量的代碼添加,因爲它不知道hotelNo字段也應該加入。

SELECT g.Name 
, b.roomNo 
, r.price 
, b.From 
, b.To 
FROM Booking b 
JOIN Guest g ON g.No = b.gNo 
JOIN Room r ON r.roomNo = b.roomNo AND b.hotelNo = r.hotelNo --<-- new 
WHERE b.hNo = 1 AND b.From <= '10-01' 
    AND (b.To IS NULL OR b.To >= '10-01'); 
+0

祝賀你自己解決你的問題。請自己接受您自己的答案(點擊勾號)以將此問題標記爲「已解決」。這對未來的訪客很重要。 – 2014-09-21 09:20:04

相關問題