сравнить два выберите в двух таблицах - PullRequest
0 голосов
/ 06 октября 2018

Мне нужно вернуться Города с вылетом международных рейсов

Я знаю, что это не правильно, но это то, что у меня пока есть.

SELECT 
    flight.departurecity 
FROM 
    flight 
INNER JOIN 
    airport ON flight.departurecity = airport.city 
WHERE 
    (SELECT airport.nation WHERE flight.departurecity = airport.city) != 
        (SELECT airport.nation WHERE flight.arrivalcity = airport.city)

Стол в аэропорту:

airport table

Таблица рейсов:

flight table

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Я просто выбрал бы:

select a.*
from airport a
where exists (select 1
              from flight f join
                   airport a2
              where f2.arrivalcity = a2.city and
                    f2.departurecity = a.city and
                    a2.nation <> a.nation
             );

Обратите внимание, что для этого не требуется select distinct, если только вам не нужен список городов, а не только аэропорты.Таким образом, она должна быть намного быстрее, чем двойная join версия.

0 голосов
/ 06 октября 2018
SELECT DISTINCT
    flight.departurecity 
FROM 
    flight 
INNER JOIN 
    airport a1 ON flight.departurecity = a1.city 
INNER JOIN 
    airport a2 ON flight.arrivalcity = a2.city 
WHERE 
    a1.nation != a2.nation;

Исправленная и измененная версия, которую Гордон Линофф хотел предложить, я думаю:

select a.*
from airport a
where exists (select *
              from flight f join
                   airport a2 on f.arrivalCity = a2.city
              where f.departureCity = a.city
                    and a2.nation <> a.nation
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...