2016-04-12 12 views
0

Ich möchte die beiden Tabellen zusammenfügen. Sie sind gleich. Aber ich brauche den Beitritt, weil ich einen Fremdschlüssel-Constraint irgendwo für Start und Land hinzugefügt habe. und beide beziehen sich auf meinen Flughafentisch. Jetzt möchte ich Flugdetails einschließlich Starts des Abflughafens und Landungsdetails anzeigen. Und ich habe keine Ahnung wie? Dies ist, was ich bis jetzt habe, es kann bis jetzt nur Startdetails anzeigen. Wenn ich versuche, die airport.airport_id erneut hinzuzufügen, erhalte ich einen Fehler. Sehen.SQL Zusammenfügen der gleichen Tabellen

select * 
from flight 
LEFT JOIN route ON flight.route_id = route.route_id 
LEFT JOIN airport ON route.takeoff_id = airport.airport_id 

gibt mir: enter image description here

Aber wenn ich diese Abfrage versuchen

die Landung Details beitreten
select * 
from flight 
LEFT JOIN route ON flight.route_id = route.route_id 
LEFT JOIN airport ON route.takeoff_id = airport.airport_id 
LEFT JOIN airport ON route.land_id = airport.airport_id; 

ich diesen Fehler: #1066 - Not unique table/alias: 'airport'

enter image description here

+0

Bitte Bilder nicht nur verwenden. Ich habe die Fehlermeldung jetzt als Text hinzugefügt, sodass Ihre Anfrage gefunden werden kann, wenn Personen mit einem ähnlichen Problem nach dieser Nachricht suchen. –

Antwort

2

Wenn Wenn Sie zweimal mit derselben Tabelle arbeiten (Self-Join), müssen Sie Tabellenaliase verwenden, um das DBMS anzuzeigen, über welches der beiden Sie sprechen.

BTW: Ich habe Ihre Outer-Joins durch innere Joins ersetzt, da ich hier keinen Grund für Outer Joins sehe. Sie sollten dem DBMS nicht mehr als nötig geben.

+0

Schau dir das an, wir haben fast zur gleichen Zeit gepostet, du bist 36 Sekunden vor mir! –

+0

@Steve Ford: Ja, das war einfach :-) –

0

den gleichen Tisch verwenden zweimal Sie sie alias müssen:

select * 
from flight 
LEFT JOIN route ON flight.route_id = route.route_id 
LEFT JOIN airport a1 ON route.takeoff_id = a1.airport_id 
LEFT JOIN airport a2 ON route.land_id = a2.airport_id; 
0

Versuchen unter Abfragen.

select * 
    from flight FL -- alis as FL 
    LEFT JOIN route RT ON FL.route_id = RT.route_id 
    LEFT JOIN airport AP1 ON RT.takeoff_id = AP1.airport_id 
    LEFT JOIN airport AP2 ON RT.land_id = AP2.airport_id; 

ODER

select * 
    from flight 
    LEFT JOIN route ON flight.route_id = route.route_id 
    LEFT JOIN airport ON route.takeoff_id = airport.airport_id and route.land_id = airport.airport_id; 
Verwandte Themen