我不明白這裏發生了什麼,我有一段代碼能夠按預期完美工作。但是,一旦我修改了另一張桌子,我開始獲取不正確的額外數據。加入新表格時出現錯誤的數據
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 ...
'Room'中可能有重複的房間號?否則,你能否爲所有顯示問題的表添加一些示例數據? – 2014-09-21 06:06:36
不,我也證實了這一點..每個房間只出現一次 – ZeroScifer 2014-09-21 06:37:38