2016-10-20 3 views
-1
definiert

Ich habe zwei Tabellen A und B, und versuchen, sie zu wählen, indem Sie SQL INNER JOIN, aber ich laufe in diesen Fehler:sql ORA-00918 beitreten: Spalte zweideutig

ORA-00918: column ambiguously defined

Ich denke, es ist, weil es Der Name von zwei Spalten in diesen beiden Tabellen ist der gleiche, das heißt A.column1, B.column1 und A.column2 und B.column2 (Der Name dieser zwei Spalten in A und B sind identisch). Da diese beiden Tabellen auf dem Server gespeichert sind, kann ich die Spalten nicht umbenennen. Was kann ich also tun?

der Code Dies ist ich benutze:

Select * FROM A INNER JOIN B WHERE A.column1 = B.column1. 

Wie kann ich es beheben?

+0

Verwenden Sie Spaltennamen mit korrektem Alias ​​anstelle von * in Ihrer Abfrage. – hemalp108

+0

Ich denke, Sie zeigen hier nicht die vollständige Abfrage. Ich würde sagen, dass Sie in Ihrer tatsächlichen Abfrage eine 'where'-Klausel für eine Spalte verwenden, die zweideutig definiert ist (existiert sowohl in A- als auch in B-Tabellen, aber es wird nicht genau angezeigt, wo sie herkommt). – sanastasiadis

Antwort

0

Ich würde empfehlen, dass Sie die select "beheben". Zum Beispiel:

SELECT A.*, B.col2, B.col3 
FROM A INNER JOIN 
    B 
    ON A.column1 = B.column1; 

Sie können aber auch eine USING-Klausel verwenden. Also, wenn der nur Namenskonflikt column1 ist, dann gilt:

SELECT * 
FROM A INNER JOIN 
    B 
    USING (column1); 

wird es nur einmal zurück.

+0

Meinst du wirklich, du kannst 'select *' in Oracle nicht tun, wenn zwei Spalten (in verschiedenen Tabellen) denselben Namen haben? – jarlh

+0

NEIN, ich bekomme immer noch den Fehler "ORA-00918: Spalte zweideutig definiert". – lsl

+0

Dieses Mal verwende ich den Code wie folgt: – lsl

0

Ein oder mehrere Spaltennamen aus Tabelle a und Tabelle b sind identisch. Vermeiden Sie die Verwendung von * in Ihrer SQL-Anweisung und verwenden Sie Tabellenpräfixe jeder Tabelle (wie A. *).

0

versuchen Alias ​​zu verwenden .. zum Beispiel in Ihrem Fall Gebrauch

SELECT * from A as TABLE1 INNER JOIN B AS TABLE2 ON TABLE1.COLUMN = TABLE2.COLUMN 
0

Welche Version von Oracle verwenden Sie? Das funktioniert in 12c fein:

SQL> create table t1 (c1 int, c2 int); 

Table created. 

SQL> create table t2 (c1 int, c2 int); 

Table created. 

SQL> insert into t1 values (1, 1); 

1 row created. 

SQL> insert into t2 values (1, 2); 

1 row created. 

SQL> select * from t1 join t2 on t1.c1 = t2.c1; 

     C1   C2   C1   C2 
---------- ---------- ---------- ---------- 
     1   1   1   2 

Natürlich könnten Sie Probleme treffen, wenn man versucht, diese SQL in PL/SQL zu verwenden, zum Beispiel

PLS-00402: alias required in SELECT list of cursor to avoid duplicate column names