select语句中的多个内部联接返回多个记录,但它应仅返回一个记录

时间:2019-03-30 21:44:02

标签: mysql database join inner-join

我的select语句返回很多记录,但只返回一个记录。我正在使用很多内部联接,但是做错了。

我正在制作电影院电影预订网站,为此,我用以下表格建立了数据库:

https://imgur.com/Eis5XIB

一个房间包含A-F行,并且座位1-10,如下图所示: https://imgur.com/aQ8y5Vr

我在桌子,电影,房间,人物,行和座位上填了唱片,所以我可以预约。我做了一些保留,看起来像这样:

https://imgur.com/waiVuMv

我做了一个额外的页面,客户可以在那里提交他的预订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的新手。

1 个答案:

答案 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)

这是假设您将行号移至座位表。

相关问题