2016-12-04 5 views
-1

私は2つのテーブルを持っています。2つの外部キーを参照するために使用するselectステートメント

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

飛行機の出発空港と到着空港の空港名を表示するには、selectステートメントを使用します。

どうすればいいですか?

+2

ヒント:2つの 'JOIN'が必要です。何を試しましたか? –

+0

あなたがそれを理解していなければここに戻ってみてください – GurV

+0

フラグメントが改訂され、コードがフォーマットされました。 – MarmiK

答えて

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テーブルに2回参加させることです。この場合のキー(実際)は、フライトテーブル内の関連する外部キーにそれらを結合することです。

両方の空港に関連する空港名を取得するには、Flightテーブルの各外部キーをAirportテーブルの主キーに結合する必要があります。

"departure"と "arrival"の2つの結合のエイリアスが役立つことを願っています。そうでない場合は、私はどのように起こっているのかを明確にすることができますコメントで私に教えてください。

+0

ありがとうございました。問題はソートされました –

+0

喜んで助けました。答えの左側にある目盛りをクリックすることで、質問に答えたことを自由に記入してください。 :) – Reisclef

関連する問題