mysql - select 语句中的多个内连接返回多条记录,但它应该只返回一条
问题描述
我的 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 的初学者。
解决方案
根据您的第一张图片的预订表,您的预订与座位无关,仅与人相关。
您需要有另一个将预订与座位 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)
这是假设您将 rowletter 移至座位表。
推荐阅读
- reverse-proxy - 查尔斯代理地图本地
- jquery - 防止默认后提交Jquery表单
- javascript - JQuery FileReader onload没有触发
- delphi-10.1-berlin - 将 spring.Nullable 与 DUnitX 一起使用时的内存问题
- vba - VBA代码将ms-access表单的参数传递给查询
- css - 没有行的网格列?
- c# - 将 Excel 文件转换为 PDF 会引发反射异常实例化工作簿 Spire.Xls 工作簿
- python - 在外部停止函数处理
- c# - C# TimeSpan:如何使用格式标识符作为格式字符串中的字符?
- python - 为什么 python 脚本在没有明确说明 cmd 中的“python”的情况下找不到这个模块?