I have a flight table like
x
CREATE TABLE flight (id int, name varchar(25), origin int, destination int);
INSERT INTO flight (id, name, origin, destination) VALUES (1, 'Alpha', 1,2);
INSERT INTO flight (id, name, origin, destination) VALUES (2, 'Beta', 3,4);
And airport table like
CREATE TABLE airport (id int, name varchar(25));
INSERT INTO airport (id, name) VALUES (1, 'Amsterdam');
INSERT INTO airport (id, name) VALUES (2, 'London');
INSERT INTO airport (id, name) VALUES (3, 'Paris');
INSERT INTO airport (id, name) VALUES (4, 'Dubai');
How can I get all airports that made a flight to or brought in a flight from Amsterdam?
If I have a query with the where clause WHERE flight.origin = 1 OR flight.destination = 1
I also get Amsterdam in my results, while there is no flight from Amsterdam to Amsterdam.
Advertisement
Answer
Use an IN
clause:
select *
from airport
where id in (select origin from flight where destination = 1)
or id in (select destination from flight where origin = 1);
Or
select *
from airport
where id in
(
select origin from flight where destination = 1
union all
select destination from flight where origin = 1
);
(You can of course replace = 1
with = (select id from airport where name = 'Amsterdam')
.)