使用内部联接时,MYSQL结果重复

时间:2015-04-19 07:21:33

标签: mysql duplicates inner-join

我试图从两个不同的表中列出两个属性(booking.roomno和room.price),条件是“booking.DATETO不为空”。

表:预订Booking Table!表:房间! enter image description here

我尝试过使用此命令

 select booking.roomno,room.price 
 from booking 
 inner join room on booking.ROOMNO=room.roomno 
 where booking.dateto is not null 

虽然返回结果来自重复的roomno和价格,如下所示 enter image description here

2 个答案:

答案 0 :(得分:2)

room.roomno不是唯一的。它在给定的酒店中是唯一的,您的房间表包含多个酒店。您还必须在连接条件中指定hotelno。此外,由于您可能有同一个房间的多个预订(即预订表中的重复),您需要进行DISTINCT以防止这种情况(但是您必须在字段列表中包含hotelno列):

select DISTINCT booking.roomno,room.price, room.hotelno
from booking 
inner join room on booking.ROOMNO=room.roomno 
   AND booking.hotelno=room.hotelno
where booking.dateto is not null 

答案 1 :(得分:1)

您有两个同一房间的预订,因此返回的行与您的内部联接相匹配。您似乎正在尝试取出所有预订的房间。您可以通过在所选字段之前添加DISTINCTROW来实现此目的。

select DISTINCTROW booking.hotelno, booking.roomno,room.price 
from booking 
inner join room on booking.ROOMNO=room.roomno AND
    booking.HOTELNO=room.HOTELNO
where booking.dateto is not null