У меня есть две таблицы, CITIES и FLIGHTS:
ГОРОДА
| я бы | название |
|---|---|
| 1 | Нью-Йорк |
| 2 | Париж |
| 3 | Токио |
| 4 | Амстердам |
РЕЙСЫ
| я бы | отправление_идентификатор | id_прибытия |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 3 |
| 4 | 2 | 4 |
Мне нужно написать запрос, который находит все стыковки рейсов.
Желаемый результат:
| Город отправления | Город прибытия |
|---|---|
| Нью-Йорк | Париж |
| Нью-Йорк | Токио |
| Париж | Токио |
| Париж | Амстердам |
Как написать этот запрос?


Вы можете использовать соединение для этого. И внутреннее соединение, и левое соединение будут служить вашей цели:
Запрос с левым соединением:
Select c.name as departure_city, ct.name as arrival_city from FLIGHTS f
left join CITIES c on f.departure_id=c.id
left join CITIES ct on f.arrival_id = ct.id
Выход:
| Город отправления | Город прибытия |
|---|---|
| Нью-Йорк | Париж |
| Нью-Йорк | Токио |
| Париж | Токио |
| Париж | Амстердам |
Запрос с внутренним соединением:
Select c.name as departure_city, ct.name as arrival_city from FLIGHTS f
inner join CITIES c on f.departure_id=c.id
inner join CITIES ct on f.arrival_id = ct.id
Выход:
| Город отправления | Город прибытия |
|---|---|
| Нью-Йорк | Париж |
| Нью-Йорк | Токио |
| Париж | Токио |
| Париж | Амстердам |
дб <> рабочий пример здесь
Вы можете сделать два соединения:
SELECT departure.name AS departure,
arrival.name AS arrival
FROM cities AS departure
JOIN flights f ON departure.id = f.departure_id
JOIN cities arrival ON arrival.id = f.arrival_id;
Без дополнительной информации неясно, хотите ли вы выполнить левое или внутреннее соединение, нужно ли вам предложение where, нужен ли порядок и т. д. Может быть, было бы лучше изучить некоторые основы SQL, а затем задать более точный вопрос, если нужно. Попробуйте, если хотите: дб <> рабочий пример
Также вы можете использовать ниже SQL:
SELECT c1.NAME, c2.NAME FROM CITIES c1, CITIES c2, flights f WHERE c1.id = f.departure_id AND c2.id = f.arrival_id;
Подготовленное заявление выглядит следующим образом:
CREATE TABLE CITIES(id int, name varchar(32));
INSERT INTO CITIES values(1, 'New York'), (2, 'Paris'), (3, 'Tokyo'), (4, 'Amsterdam');
CREATE TABLE FLIGHTS(id int, departure_id int, arrival_id int);
INSERT INTO FLIGHTS VALUES(1,1,2), (2,1,3), (3,2,3), (4,2,4);
Пожалуйста, дайте ссылки на некоторые доказательства, где мы должны использовать JOIN при объединении таблиц.
Это очень устаревший и плохой стиль, чтобы избежать использования JOIN при объединении таблиц.