2017-07-11 1 views
-1

J'ai deux tables qui renvoient des résultats quand je les ai mis ensemble à l'aide UNION ALL, comme ceci:Obtention de la colonne ambiguë définie lorsque je ne devrais pas. Pourquoi?

SELECT * FROM TABLE_A 
UNION ALL 
SELECT * FROM TABLE_A 

Mais pour une raison quelconque quand j'ajouter ce code dans un comme ci-dessous, l'article WITH, il ne fonctionne pas:

WITH    
SQ_Union AS 
(
    SELECT * FROM TABLE_A 
    UNION ALL 
    SELECT * FROM TABLE_A 
) 
SELECT 
    * 
FROM 
    SQ_Union 

Quand je lance que je reçois le texte suivant:

ORA-00918: column ambiguously defined 

les deux tables ont les mêmes colonnes, le nom de la même, mais avec des noms de tables différents, et le contenu des données. Pourquoi cela est-il exécuté sans la clause WITH et ne fonctionne pas avec?

+0

Il n'y a qu'une seule table 'TABLE_A' dans votre exemple et la requête fonctionne correctement. pouvez-vous vérifier votre requête et fournir le sql qui ne fonctionne pas? – are

+1

Le message d'erreur doit pointer vers une ligne spécifique dans le code, s'il vous plaît fournir également cette information. – mathguy

Répondre

1

J'ai créé les tables de cette manière exprès.

create table a (a1 number, b1 number); 
create table b (b1 number, a1 number); 

insert into a values (1, 2); 
insert into b values (3, 4); 
commit; 

WITH    
    SQ_Union AS (
     SELECT * FROM a 
     UNION ALL 
     SELECT * FROM b 
    ) 
SELECT * FROM SQ_Union; 

Je ne peux pas faire échouer sur Oracle 12.1.0.2. Je suppose que vous avez un problème avec le code que vous n'avez pas partagé.

BTW, le texte ci-dessus serait considéré comme MCVE. Lorsque vous faire une tentative pour en créer un, vous trouverez sans doute la cause du problème. Pour citer l'un de mes personnages préférés, "Take it slow".