Je travaille sur un projet de devoirs et je suis censé effectuer une requête de base de données qui trouve les vols soit par le nom de la ville, soit par le code de l'aéroport, mais la flights
table ne contient que les codes d'aéroport donc si je veux rechercher par ville, je dois rejoindre sur la airports
table.
Le tableau des aéroports comprend les colonnes suivantes: code, city
Le tableau des vols comprend les colonnes suivantes: airline, flt_no, fairport, tairport, depart, arrive, fare
Les colonnes fairport
et tairport
sont les codes d'aéroport de départ et d' arrivée.
Les colonnes depart
et arrive
sont les dates de départ et d'arrivée.
Je suis venu avec une requête qui joint d'abord les vols sur la fairport
colonne et la airports.code
colonne. Pour que je corresponde au, tairport
je dois effectuer une autre jointure sur les matchs précédents 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 bons résultats et cela suffira pour les devoirs, mais je me demande si je peux JOIN
sur plusieurs colonnes? Comment pourrais-je construire la WHERE
clause pour qu'elle corresponde au départ et à la ville / code de destination?
Ci-dessous, une "pseudo-requête" sur ce que je veux réaliser, mais je ne parviens pas à obtenir la syntaxe correctement et je ne sais pas comment représenter le airports
tableau des départs et des 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')
Mettre à jour
J'ai également trouvé que cette représentation visuelle des instructions SQL Join était très utile en tant que guide général sur la construction d'instructions SQL!
Réponses:
Vous pouvez JOIN avec la même table plusieurs fois en donnant aux tables jointes un alias , comme dans l'exemple suivant:
Notez que
to_port
etfrom_port
sont des alias pour les première et deuxième copies de laairports
table.la source
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
Veuillez suggérer.quelque chose comme....
la source
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
Cela fait-il une différence? Qu'est-ce que tu penses?si mysql vous convient:
edit: exemple ajouté pour filtrer la sortie pour le code ou la ville
la source
Pouvez-vous simplement utiliser et dans l'article sur?
Par exemple, quelque chose comme:
la source
Si vous souhaitez effectuer une recherche sur les aéroports FROM et TO, vous souhaiterez vous joindre deux fois à la table Airports.Vous pouvez alors utiliser à la fois les tables from et to dans votre ensemble de résultats:
la source