我用什么select语句来引用两个外键?

时间:2016-12-04 17:35:53

标签: mysql sql

我有两张桌子。

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');

我想使用一个选择语句查看该航班的出发和到达机场的机场名称。

我将如何做到这一点?

1 个答案:

答案 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;到达"帮助。如果没有,请在评论中告诉我如何更好地澄清发生的事情。