我有两张桌子。
CREATE TABLE `Airport` (
`AirportId` INT (10) NOT NULL AUTO_INCREMENT
,`CityId` INT (10) NOT NULL
,`AirportName` VARCHAR(50) NOT NULL
,PRIMARY KEY (`AirportId`)
) ENGINE = InnoDB AUTO_INCREMENT = 5 DEFAULT CHARSET = latin1
INSERT Airport ()
VALUES ('1','1','Belfast City')
,('2','1','Belfast International')
,('3','2','Gatwick')
,('4','2','Stanstead');
CREATE TABLE `Flight` (
`FlightId` INT (10) NOT NULL AUTO_INCREMENT
,`DepartureAirportId` INT (10) NOT NULL
,`ArrivalAirportId` INT (10) NOT NULL
,`DateLeaving` DATE NOT NULL
,`DateReturning` DATE DEFAULT NULL
,PRIMARY KEY (`FlightId`)
,KEY `DepartureAirportId`(`DepartureAirportId`)
,KEY `ArrivalAirportId`(`ArrivalAirportId`)
,CONSTRAINT `FlightTest_ibfk_2` FOREIGN KEY (`ArrivalAirportId`) REFERENCES `Airport`(`AirportId`)
,CONSTRAINT `FlightTest_ibfk_1` FOREIGN KEY (`DepartureAirportId`) REFERENCES `Airport`(`AirportId`)
) ENGINE = InnoDB AUTO_INCREMENT = 2 DEFAULT CHARSET = latin1
INSERT Flight ()
VALUES ('1','1','4','2016-12-04','2016-12-10');
我想使用一个选择语句查看该航班的出发和到达机场的机场名称。
我将如何做到这一点?
答案 0 :(得分:0)
SELECT departure.AirportName, arrival.AirportName
FROM Flight
JOIN Airport departure
ON Flight.DepartureAirportId = departure.AirportId
JOIN Airport arrival
ON Flight.ArrivalAirportId = arrival.AirportId
WHERE Flight.FlightId = '1'
有效地需要在这里发生的事情是将Flight表加入Airport表两次。在这种情况下,关键(确实)是将它们连接到航班表中的相关外键上。
因此,为了获得两者的相关机场名称,您需要将Flight表中的每个外键加入Airport表的主键。
我希望这两个联盟的别名是"离开"和#34;到达"帮助。如果没有,请在评论中告诉我如何更好地澄清发生的事情。