200 votes

Comment faire une jointure interne sur plusieurs colonnes

Je suis en train de travailler sur un projet et je suis censé effectuer une requête de base de données qui trouve des vols, soit par le nom de la ville ou le code de l'aéroport, mais l' flights tableau ne contient que de l'aéroport de codes donc, si je veux rechercher par ville-je me joindre sur l' airports table.

Les aéroports de table comporte les colonnes suivantes: code, city
Le tableau des vols comporte les colonnes suivantes: airline, flt_no, fairport, tairport, depart, arrive, fare
Les colonnes fairport et tairport sont le de et pour l'aéroport de codes.
Les colonnes depart et arrive sont des dates de départ et d'arrivée.

Je suis venu avec une question, qui rejoint tout d'abord les vols fairport colonne et l' airports.code colonne. Dans l'ordre pour moi de correspondre à l' tairport - je effectuer une autre jointure sur les précédents matches de la première jointure.

SELECT airline, flt_no, fairport, tairport, depart, arrive, fare
    FROM (SELECT * FROM flights
        INNER JOIN airports
        ON flights.fairport = airports.code
        WHERE (airports.code = '?' OR airports.city='?')) AS matches
    INNER JOIN airports
    ON matches.tairport = airports.code
    WHERE (airports.code = '?' OR airports.city = '?')

Ma requête renvoie les résultats appropriés et il suffira que le but des devoirs, mais je me demande si je peux l' JOIN sur plusieurs colonnes? Comment pourrais-je construire l' WHERE clause de sorte qu'il corresponde au départ et à destination de la ville/code?

Ci-dessous est un "pseudo-query" sur ce que je veux atteindre, mais je ne peux pas obtenir la syntaxe correctement et je ne sais pas comment représenter l' airports tableau pour les départs et les destinations:

SELECT * FROM flights
INNER JOIN airports
ON flights.fairport = airports.code AND flights.tairport = airports.code
WHERE (airports.code = 'departureCode' OR airports.city= 'departureCity') 
    AND (airports.code = 'destinationCode' OR airports.city = 'destinationCity')

Mise à jour

J'ai aussi trouvé cette représentation visuelle de Jointure SQL consolidés être très utile comme un guide général sur la façon de construire les instructions SQL!

166voto

Daniel Vassallo Points 142049

Vous pouvez joindre plus d’une fois avec la même table en donnant les tables jointes un alias, comme dans l’exemple suivant :

Notez que les et sont des alias pour les premiers et deuxième exemplaires de la `` table.

31voto

Paul Creasey Points 15663

quelque chose comme...

21voto

Phil Rykoff Points 6650

Si mysql est OK pour vous :

Edit : ajout d’exemple pour filtrer la sortie pour le code ou la ville

4voto

MisterZimbu Points 1274

Si vous souhaitez rechercher sur les deux d’et vers les aéroports, vous aurez envie de rejoindre la table des aéroports deux fois - alors vous pouvez utiliser d’et vers les tables dans votre jeu de résultats :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X