MySQL左外连接或内连接

时间:2014-02-07 18:35:54

标签: mysql sql join

tbl_House
House_Code (Unique, PK)
Description


tbl_Room
Room_id(pk, auto increment)
House_Code
room_name
available_date


tbl_RoomBook
book_id
House_Code
Room_id
Checkin
Checkout

好的,我正试图从这三张表中获取所有记录。

表之间的关系是。

一间有许多房间的房子和一间有许多预订记录的房间

我使用了下面的查询,但我不认为这完全按照我想要的方式运作

因为他们使用house_code保持唯一性......(我想。)

   SELECT H.house_code, H.description
    FROM House H
       LEFT OUTER JOIN Room R
          ON H.house_code = R.house_code
       LEFT OUTER JOIN Room_Book RB
          ON H.house_code = RB.house_code

3 个答案:

答案 0 :(得分:0)

对于此类查询,inner join应该没问题。没有理由认为代码会出现在主表中未定义的其中一个表(例如room)中。

但是,您的上一次加入应该也包括房间ID:

SELECT H.house_code, H.description
FROM House H INNER JOIN
     Room R
     ON H.house_code = R.house_code INNER JOIN
     Room_Book RB
     ON H.house_code = RB.house_code RB.Room_Id = R.Room_Id;

这有点推测。样本数据可以解决问题。

答案 1 :(得分:0)

不是吗:

SELECT H.house_code, H.description
FROM House H
   INNER JOIN Room R
      ON H.house_code = R.house_code
   INNER JOIN Room_Book RB
      ON H.house_code = RB.Room_id  

答案 2 :(得分:0)

由于左连接,您将获得House记录是否列出任何房间或其任何房间已被预订。

会有重复的记录。您将看到每个房屋代码和说明的列表,重复多个房间乘以Room_Book记录计数。

如果您希望记录是唯一的,只需查询House表或执行某种类型的分组或使用Select Distinct。

建议:在每个表格中显示一些示例条目,然后显示您想要的结果集,您将获得更多帮助。