2011-05-09 49 views
6

假设我有3个表的MySQL innerjoin 3表

  • 乘客(ID [PK],名称)
  • 飞机(注册[PK],NUM_SEATS)
  • 预订(ID,passenger_id[FK - > Passenger.Id]airplane_registration[FK - > Airplane.registration]

由于Passenger和Booking表之间存在多对多关系,因此预订表将成为交汇点对象。

我怎样才能选择与某个预订ID相关的所有细节(比如'abcde')?

这是正确的:

SELECT Passenger.name, Airplane.num_seats, Booking.Id 
    FROM Booking 
    JOIN Passenger ON Passenger.Id = Booking.passenger_Id 
    JOIN Airplane ON Booking.airplane_registration = Airplane.registration 
WHERE Booking.Id = 'abcde'; 

这是做正确的方式? 另外,如果我想选择所有预订和他们的详细信息,我是否会以同样的方式执行操作? (没有where子句)?

我一直在寻找这个测试是否正确,因为MySQL在我的机器上出现故障。

+0

嗨OMG小马,我在格式上犯了错误吗?如果是这样,我做错了什么?谢谢 – Joeblackdev 2011-05-09 22:54:50

+1

Salutations(IE:Hi)和陈词滥调(IE:谢谢)浪费了屏幕房地产(如果接受评级低于50% - 侮辱)。我尽可能提高可读性 - 更有可能你会得到帮助。 – 2011-05-09 23:01:02

回答

1

是的,您的查询可用于获取乘客的详细信息以及特定预订ID的航班信息。为了获得所有预订,我会添加ORDER BY bookingID,如果需要乘客姓名和航班注册。

0

不知道你的模式,没有办法确定,但对我来说看起来很好。

+0

你好。道歉不澄清。我已更新我的原始帖子。如您所见,预订表包含2个外键。第一个引用Passenger表中的主键'Id',第二个引用表Airplane中的主键'注册'。 – Joeblackdev 2011-05-09 23:01:25