Как создать эту хранимую процедуру? - PullRequest
0 голосов
/ 17 января 2011

Я хочу создать хранимую процедуру, которая позволит мне узнать предполагаемое время полетов с Испанией в качестве пункта назначения (входящий аэропорт находится в Испании). И у меня есть следующие таблицы:

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 в FLIGHT_PLAN с кодом в AIRPORT, а затем с кодом CITY и кодом в COUNTRY?

Должен ли я использовать внешние ключи или что?

Ответы [ 2 ]

0 голосов
/ 17 января 2011
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 голосов
/ 17 января 2011

Вы можете связать таблицы, используя

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 чувствителен, поэтому следите за орфографией Испании или используйте

WHERE UPPER(C.name) = 'SPAIN'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...