У меня есть таблица routes
, которая выглядит следующим образом:
id | start_point | end_point
----+-------------+-----------
1 | 1 | 2
2 | 1 | 10
3 | 2 | 1
4 | 2 | 5
5 | 2 | 9
9 | 4 | 5
10 | 5 | 2
11 | 5 | 4
12 | 5 | 8
14 | 7 | 8
...
И start_point
, и end_point
относятся к столбцу location
из таблицы airports
:
Foreign-key constraints:
"routes_end_point_fkey" FOREIGN KEY (end_point) REFERENCES airports(id) ON DELETE CASCADE
"routes_start_point_fkey" FOREIGN KEY (start_point) REFERENCES airports(id) ON DELETE CASCADE
airports
:
Column | Type | Collation | Nullable | Default
----------+-----------------------+-----------+----------+--------------------------------------
id | bigint | | not null | nextval('airports_id_seq'::regclass)
location | character varying(20) | | not null |
Есть ли способ создать запрос, который заменит значения start_point
и end_point
для значений из location
, используя соединения (или любое другое решение ), поэтому результат будет выглядеть примерно так:
id | start_point | end_point
----+-------------+-----------
1 | New York | Moscow
2 | New York | Tokyo
3 | Moscow | New York
4 | Moscow | Rome
...
Все, что я сейчас могу сделать, - это напечатать результаты как start_point
, так и end_point
в одном столбце с этим запросом:
select location as departure_point from airports join routes on airports.id = routes.start_point
union all
select location as destination from airports join routes on airports.id = routes.end_point;
Так это выглядит так:
location
----------
New York
New York
Moscow
Moscow
...
Moscow
Tokyo
New York
Rome
...
Есть предложения?