2011-01-16 11 views
0

私はスペインを目的地とするフライトの推定時刻を知ることができるストアドプロシージャを作成したいと考えています(到着空港はスペインにあります)。私は次の表を持っています:このストアドプロシージャを作成するには?

FLIGHT_PLAN(plan_number NUMBER, outgoing_airport NUMBER, estimated_flight_time NUMBER, incoming_airport NUMBER); 

AIRPORT (code NUMBER, name VARCHAR(20), city_code NUMBER); 

CITY (code NUMBER,name VARCHAR(20),country_code NUMBER); 

COUNTRY (code NUMBER, name VARCHAR(20)); 

どうすればいいですか? incomming_airportフィールドをにコードをAIRPORTにチェーンして、CITYにコードし、コードをCOUNTRYにするにはどうすればよいですか?

私は外部キーを使用すべきですか?

+0

スキームからの情報はありませんANY間隔情報または派生するkmsを含むものを提供しています。 – RichardTheKiwi

+0

ええ、巨大な省略。解決される。 – andandandand

答えて

0

あなたは

FROM COUNTRY C 
inner join CITY I on I.country_code = C.code 
inner join AIRPORT A on A.city_code = I.code 
inner join FLIGHT_PLAN F on F.incoming_airport = A.code 
WHERE C.name = 'Spain' 

注使用してテーブルをリンクすることができます。OracleはASE敏感であるので、スペインのスペルを見たり、あなたがスペインのコードを知っている場合

WHERE UPPER(C.name) = 'SPAIN' 
0
 
SELECT plan_number, 
     outgoing_airport, 
     incoming_airport, 
     estimated_flight_time 
FROM flight_plan 
WHERE incoming_airport IN (SELECT ap.code 
          FROM airport ap 
          JOIN city ct ON ct.code = ap.city_code 
          JOIN country co ON co.code = ct.country_code 
          WHERE co.name = 'Spain') 

を使用しますあなたはサブセレクトのJOINを省略して直接追加することができますWHERE ct.country_code = 42

結果の空港名と都市名を入力してください。

 
SELECT fp.plan_number, 
     fp.estimated_flight_time, 
     fp.outgoing_airport, 
     out_ap.name as outgoing_airport_name, 
     out_city.name as outgoing_city_name, 
     fp.incoming_airport, 
     in_ap.name as incoming_airport_name, 
     in_city.name as incoming_city_name 
FROM flight_plan fp 
    JOIN airport in_ap ON in_ap.code = fp.incoming_airport 
    JOIN city in_city ON in_city.code = in_ap.city_code 
    JOIN airport out_ap ON out_ap.code = fp.outgoing_airport 
    JOIN city out_city ON out_city.code = out_ap.city_code 
WHERE incoming_airport IN (SELECT ap.code 
          FROM airport ap 
          JOIN city ct ON ct.code = ap.city_code 
          JOIN country co ON co.code = ct.country_code 
          WHERE co.name = 'Spain') 
+0

なぜ、WHERE句でクエリが必要なのですか?特に2つの同じクエリを実行している2番目のケースでクエリが必要ですか?なぜcyberkiwiが指摘しているようにそれをしないのですか? –

+0

最初の例では、その中に結合がないので、必要でした。 2番目の例では、単純にlazynessをコピー&ペーストしています。 2番目の例では、サブテーブルを使用するのと同じように有効なメインクエリにcountryテーブルを追加する必要があります。おそらく味の問題 –

関連する問題