Oracle
 sql >> Database >  >> RDS >> Oracle

ORACLE 12.2.01 selezione di colonne da tabelle diverse con nomi simili --> identificatore di colonna interno utilizzato

Secondo Oracle (DocId 2658003.1), ciò accade quando vengono soddisfatte tre condizioni:

  1. Aderisci ad ANSI
  2. UNIONE/UNIONE TUTTI
  3. la stessa tabella compare più di una volta nella query

Apparentemente, "QCSJ_C" viene utilizzato internamente quando Oracle trasforma i join in stile ANSI.

MODIFICA:

Trovato un esempio minimo:

SELECT * FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy
UNION
SELECT * FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy;

QCSJ_C000000000300000 QCSJ_C000000000300001
X                     X

Può essere risolto utilizzando la sintassi di join non ANSI:

SELECT * FROM dual d1, dual d2 WHERE d1.dummy=d2.dummy
UNION
SELECT * FROM dual d1, dual d2 WHERE d1.dummy=d2.dummy;

DUMMY DUMMY_1
X     X

Oppure, preferibilmente utilizzando i nomi delle colonne invece di * :

SELECT d1.dummy, d2.dummy FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy
UNION
SELECT d1.dummy, d2.dummy FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy;

DUMMY DUMMY_1
X     X