2016-11-29 2 views
0

ich diesen Fehler, egal was ich mit dem INNER JOIN tun StatementSQL: ORA-00918 Spalte zweideutig in INNER JOIN definiert

Hier ist mein Code:

SELECT Package_Code, Description, Duration, Site_Code 
FROM tbl_Holiday_Details 
INNER JOIN tbl_Site_Visted 
ON tbl_Holiday_Details.Package_Code = tbl_Site_Visted.Package_Code 
INNER JOIN tbl_Site_Visted 
ON tbl_Site_Details.Site_Code = tbl_Site_Visted.Site_Code 

ich nicht verstehe, was das Problem ist.

ps. Bei Bedarf werde ich mehr Code liefern

+0

Wenn beide Tabellen eine Spalte mit demselben Namen enthalten, dann müssen Sie die DB sagen, welche Sie bedeuten. Tun Sie das, indem Sie den Tabellennamen vor der Spalte hinzufügen. –

+0

Sie haben 'Site_Code'-Spalten in mindestens zwei Tabellen. In der Spaltenliste 'SELECT' klären Sie nie, welchen Sie möchten. –

+0

Ich bin 3 Tabellen zusammen und tbl_site_visted ist die Verbindung zwischen tbl_holiday_details und tbl_Site_Details – user3719086

Antwort

2

Das unmittelbare Problem ist, dass zumindest Package_Code und Site_Code in mehreren Tabellen existieren, aber Ihre select nicht festgelegt, welche Tabelle Sie Daten aus zurückkehren möchten. Ja, Sie wissen, dass Sie einen inneren Join für diese Spalten durchführen, so dass es keine Rolle spielt, welcher Wert der Tabelle zurückgegeben wird, aber die SQL-Syntax lässt Oracle diesen Rückschluss nicht zu. Im Allgemeinen würde ich empfehlen, dass Sie immer jede Spalte als Alias ​​verwenden, damit klar ist, aus welcher Tabelle ein bestimmtes Attribut stammt, und dass Sie den Code nicht brechen, wenn Sie einer anderen Tabelle, die denselben Namen hat, ein Attribut hinzufügen.

SELECT tbl_Holiday_Details.Package_Code, 
     Description, 
     Duration, 
     tbl_Site_Visted.Site_Code 
    FROM tbl_Holiday_Details 
     INNER JOIN tbl_Site_Visted 
      ON tbl_Holiday_Details.Package_Code = tbl_Site_Visted.Package_Code 
     INNER JOIN tbl_Site_Visted 
      ON tbl_Site_Details.Site_Code = tbl_Site_Visted.Site_Code 

arbeiten Description und Duration unter der Annahme, in einer der drei Tabellen nur definiert. Ich würde auch Description und Duration Aliase hinzufügen, aber ich weiß nicht, welche der Tabellen verwendet werden sollten. Natürlich würde ich im Allgemeinen einfachere Aliase (z. B. tsv für tbl_Site_Visited) anstelle des vollständigen Tabellennamens verwenden.

Wenn Sie Ihre Spalten vermeiden wollen Aliasing, könnten Sie die USING-Klausel verwenden, anstatt die ON Klausel

SELECT Package_Code, 
     Description, 
     Duration, 
     Site_Code 
    FROM tbl_Holiday_Details 
     INNER JOIN tbl_Site_Visted 
      USING(Package_Code) 
     INNER JOIN tbl_Site_Visted 
      USING(Site_Code) 
+0

Danke das hat wie ein Zauber funktioniert. Die Verwendung von "USING" ist viel einfacher und unkomplizierter. – user3719086