MySQL INNER JOIN返回所有行

时间:2016-10-09 18:46:53

标签: mysql inner-join

我有两张桌子'酒店'和'航班'有一个' typeId'引用'行程的字段'表外键' id'。 例如:hotel.foreign(' tripId')。引用(' id')。inTable('行程');

我想从每个表格中选择行程ID为3的所有行。我尝试了以下但我收到了行程中的所有ID,而不仅仅是3.

SELECT itineraries.* , hotels.* , flights.* 
FROM itineraries 
INNER JOIN hotels ON hotels.tripId = itineraries.id 
INNER JOIN flights ON flights.tripIid = 3

2 个答案:

答案 0 :(得分:0)

您也应管理航班的内部联接,并按tripIid = 3

的位置进行过滤
SELECT itineraries.* , hotels.* , flights.* 
FROM itineraries 
INNER JOIN hotels ON hotels.tripId = itineraries.id 
INNER JOIN flights ON flights.tripIid = itineraries.id 
WHERE  flights.tripIid = 3

你最后的评论

  

我如何编辑它,以便它仍然返回所有行,如果有的话   匹配tripID但没有航班的酒店?

你应该使用左连接

SELECT itineraries.* , hotels.* , flights.* 
FROM itineraries 
INNER JOIN hotels ON hotels.tripId = itineraries.id 
LEFT JOIN flights ON flights.tripIid = itineraries.id 
WHERE  hotels.tripId = 3

答案 1 :(得分:0)

您的查询应该是:

SELECT itineraries.* , hotels.* , flights.* 
FROM itineraries 
INNER JOIN hotels ON hotels.tripId = itineraries.id 
INNER JOIN flights ON flights.tripId=itineraries.Id 
Where flights.TripId= 3

在您的原件中,您限制了航班。 TripId等于3,但酒店和行程没有约束(也不直接)。这就是你看到所有旅行ID的原因