Я должен отразить номера рейсов для пар рейсов, идущих туда и обратно из нескольких городов, например:
1439 ATL SFO
1440 SFO ATL
будет выглядеть как:
1440 ATL SFO
1439 SFO ATL
Я пробовал этот запрос (потому что вы не можете ОБНОВИТЬ .. ПРИСОЕДИНИТЬСЯ в Oracle):
UPDATE
(SELECT f.airline, f.flightno flightno_f, d.airline, d.flightno flightno_d
FROM flights f
INNER JOIN flights d ON f.airline = 9 AND
f.sourceairport = d.destairport AND
f.destairport = d.sourceairport AND d.airline = 9
WHERE d.flightno < f.flightno) g
SET g.flightno_f = g.flightno_d,
g.flightno_d = g.flightno_f;
, где авиакомпания flightno является основным ключом для настольных рейсов. Выбор дает мне правильный набор записей, на которые я хочу обменяться, но ОБНОВЛЕНИЕ ... SET дает мне эту ошибку:
SET g.flightno_f = g.flightno_d,
*
ERROR at line 7:
ORA-01779: cannot modify a column which maps to a non key-preserved table
Есть идеи, где я иду не так?