2016-12-10 2 views
0

im eine Spalte zweideutig definierte im immer versuchen, eine Abfrage zu schreiben, Daten aus drei verschiedenen Tabellen zu erhalten meine Frage istCOLUMN zweideutig DEFINIERT ORACLE

select flight_no, 
     country_code, 
     destination, 
     depatue_time, 
     arrival_time 
from flight, 
    country, 
    flight_availibility 
where country_code='MCT' 
    and destination='IND' 
order by flight_no; 

und im immer Fehler kann mir jemand sagen, was falsch ist !!!

+3

(1) Verwenden Sie niemals Kommas in der 'FROM' Klausel; * immer * verwenden Sie explizite, richtige, moderne 'JOIN'-Syntax. (2) Qualifizieren Sie Ihre Spaltennamen (vorzugsweise mit Tabellenaliasen), insbesondere wenn Sie SQL lernen. (3) Der Fehler ist ziemlich offensichtlich; Eine Spalte, auf die Sie verwiesen haben, befindet sich in mehreren Tabellen. –

+0

Sie treten 3 Tabellen ohne Join-Bedingungen bei. Ist das richtig? – Aleksej

+0

Bitte bearbeiten Sie Ihre Frage mit der Schaltfläche 'edit' direkt unter den Tags und fügen Sie die Definitionen jeder der beteiligten Tabellen hinzu. Vielen Dank. –

Antwort

0

Der Fehler besagt, dass Sie nach einer Spalte fragen, die einen Namen aus mehreren dieser Tabellen enthält. Sie wollen 'flight_no' - aber es könnte eine Spalte namens 'flight_no' in den Flug- und Landtabellen sein.

Um dies zu vermeiden, verwenden Sie Aliase in Ihrer FROM-Klausel.

Beispiel

select a.col1, b.col1 
from table1 a, table2 b 
where a.id = b.id; 

Diese nicht eindeutig ist, weil Sie Oracle explizit doch sagen genannt, welche Spalten ‚col1‘ Sie wollen - Sie machen es nicht erraten.

Dies ist nicht Teil Ihrer Frage, aber Ihre Abfrage, während Sie sie schreiben, bewirkt, dass die Datenbank jeden Datensatz in jeder Tabelle mit jedem anderen Datensatz in den anderen beiden Tabellen verknüpft. Dies wird als kartesisches Join oder Produkt bezeichnet.

Ist es notwendigerweise falsch? Vielleicht nicht. Aber 99% der Zeit ist es nicht das, was du willst. Sie möchten nur die Zeilen, die übereinstimmen - verwenden Sie also eine WHERE-Klausel und filtern Sie die Zeilen heraus.

Oder gehen Sie den ANSI JOIN-Weg und tun Sie es in der FROM-Klausel.

0

Der Fehler trat auf, weil gleiche Spaltennamen in den zwei Tabellen mit, so dass, wenn wir die Abfrage nur mit Spaltennamen ausführen, wird dieser Fehler auftritt

die folgende versuchen, dieses Problem zu vermeiden:

select a.flight_no,b.country_code,a.destination,c.depature_time,c.arrival_time 

von Flug a, Land b

Verwandte Themen