我的select语句返回很多记录,但只返回一个记录。我正在使用很多内部联接,但是做错了。
我正在制作电影院电影预订网站,为此,我用以下表格建立了数据库:
一个房间包含A-F行,并且座位1-10,如下图所示: https://imgur.com/aQ8y5Vr
我在桌子,电影,房间,人物,行和座位上填了唱片,所以我可以预约。我做了一些保留,看起来像这样:
我做了一个额外的页面,客户可以在那里提交他的预订ID并获取有关他的预订的信息。
因此,我想要获得的是row_letter和seatnumber以及带有来自客户预订ID的select语句的语句。
我试图通过此查询获取它。
SELECT seatnumber, row.row_letter FROM show
INNER JOIN room ON room.idroom = show.room_idroom
INNER JOIN row ON room.idroom = row.room_idroom
INNER JOIN seat ON row.idrow = seat.row_idrow
INNER JOIN reservation ON reservation.show_idshow = show.idshow
WHERE reservation.idreservation = 11;
我得到的是: https://imgur.com/bvA86ee
我所期望的只是一个包含座位号和row_letter的记录。 我究竟做错了什么?很抱歉成为SQL的新手。
答案 0 :(得分:0)
根据第一张图片的预订表,您的预订不以任何方式与座位相关,而仅与人员相关。
您需要另一个将预订与座位ID关联的表。当然,您可以只将席位ID列添加到预订表中,但是很明显,当一个人预订了1个以上的席位时,这会产生问题。
还要注意,尽管您的其他表似乎很正确,但是对于您似乎要对它们执行的那种查询它们却很笨拙,这可以通过大量内部联接来证明。可能会丢失行表,而只是用行列标识每个席位。
一旦您添加了一个预留座位表,它可以很简单:
Idreservation,
Idseat
然后,您可以通过以下方式获得预订席位:
Select rowletter, seat_number from seats
Where idseat in (select idseat from reserved_seats where idreservation=the reservation you are checking now)
这是假设您将行号移至座位表。