我有几个不同的表,一个是hotel
,包含一系列酒店的信息,另一个是room
,其中包含酒店内房间的信息。
我正在尝试查询数据库中的酒店名称列表以及以某种方式订购的房间号码。订购它们很容易,但我在试图破解一些代码以使其工作时遇到了麻烦。
我得到的是:
SELECT
hotelName,
roomNo
FROM
hotel
RIGHT JOIN
room
ON
hotel.hotelName = room.roomNo
这是有效的,它连接表格并显示所有房间号码,但所有酒店名称都返回为空。我已经研究了几天,这是我研究的一部分,但我无法弄清楚如何让它发挥作用。这些表没有通过和键连接,但据我所知,这应该没关系,并且它与普通和LEFT JOIN无关。
为这一个人的任何帮助干杯:)
这是phpMyAdmin设计器中显示的数据库,以及我使用当前代码获得的结果。我需要的唯一区别是酒店名称显示存储在数据库中的实际酒店名称。
答案 0 :(得分:1)
您通过酒店名称和房间号码链接酒店和客房,我认为应该是:
SELECT
hotelName,
roomNo
FROM
hotel
INNER JOIN
room
ON
hotel.HotelNo = room.HotelNo
right join
只有在你可以拥有不属于酒店的酒店房间时才有意义,所以我使用了INNER JOIN
。
你知道酒店的名字不是一个好主键。您应该定义HotelID
。酒店名称和房间号码似乎是两个完全不同的东西。 更新: 您的数据库的新图像显示它HotelNo
我猜您忘记在房间表中添加一个外键列到酒店。 HotelName
是一个不好的候选人,因为可能有多个同名酒店。您需要一个唯一的标识符。在hotel
(f.e。HotelID
)中创建一个主键列,在room
(酒店所属的酒店)中为酒店创建一个FK列。您也可以将此列命名为HotelID
。
答案 1 :(得分:0)
您应该使用内部联接和适当的条件进行加入
SELECT
hotelName,
roomNo
FROM hotel
INNER JOIN room ON hotel.YourHotelID=room.YourHotelID;
答案 2 :(得分:0)
如果表格没有通过子表中的唯一外键(例如hotelID)连接,则无法确定哪些房间属于特定酒店