Sql 加入新表时出现不正确的数据

Sql 加入新表时出现不正确的数据,sql,oracle,Sql,Oracle,我不明白这里发生了什么,我有一段代码可以像预期的那样完美地工作。然而,一旦我用另一个表修改了它,我就开始得到不正确的额外数据 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 O

我不明白这里发生了什么,我有一段代码可以像预期的那样完美地工作。然而,一旦我用另一个表修改了它,我就开始得到不正确的额外数据

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'); 
在我将其修改为:

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'); 
给出了正确的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个结果……

在我不想知道多少小时后,我找到了我自己的答案,这太简单了

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'); 
选择g.名称
,b.房间号
,r.price
,b.来自
,b.To
预订b
在g.No=b.gNo上加入来宾g

在r.roomNo=b.roomNo和b.hotelNo=r.hotelNo上加入房间r——可能在
房间中重复房间号?否则,您可以为显示问题的所有表添加一些示例数据吗?不,我也验证了这一点。。每个房间只出现一次你自己解决问题的集合。请自行接受您的答案(点击勾号),以便将此问题标记为“已解决”。这对未来的游客很重要。
SELECT b.roomNo
    FROM Booking b
    JOIN Room r ON b.roomNo = r.roomNo
    WHERE b.hNo = 1;
JOIN Room r ON r.roomNo = b.roomNo AND b.hotelNo = r.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');