Mi jefe encontró un error en una consulta que creé y no entiendo el razonamiento detrás del error, aunque los resultados de la consulta demuestran que tiene razón. Aquí está la consulta (versión simplificada) antes de la corrección:
select PTNO,PTNM,CATCD
from PARTS
left join CATEGORIES on (CATEGORIES.CATCD=PARTS.CATCD);
y aquí está después de la corrección:
select PTNO,PTNM,PARTS.CATCD
from PARTS
left join CATEGORIES on (CATEGORIES.CATCD=PARTS.CATCD);
El error era que se mostraban valores nulos para la columna CATCD, es decir, los resultados de la consulta incluían resultados de la tabla CATEGORÍAS en lugar de PARTES. Esto es lo que no entiendo: si había ambigüedad en la consulta original, ¿por qué Oracle no arrojó un error? Por lo que entendí, en el caso de combinaciones izquierdas, la tabla "principal" en la consulta (PARTES) tiene prioridad en la ambigüedad. ¿Me equivoco o simplemente no estoy pensando en este problema correctamente?
Actualizar:
Aquí hay un ejemplo revisado, donde no se arroja el error de ambigüedad:
CREATE TABLE PARTS (PTNO NUMBER, CATCD NUMBER, SECCD NUMBER);
CREATE TABLE CATEGORIES(CATCD NUMBER);
CREATE TABLE SECTIONS(SECCD NUMBER, CATCD NUMBER);
select PTNO,CATCD
from PARTS
left join CATEGORIES on (CATEGORIES.CATCD=PARTS.CATCD)
left join SECTIONS on (SECTIONS.SECCD=PARTS.SECCD);
¿Alguien tiene una pista?
Solución del problema
Aquí está la consulta (versión simplificada)
Creo que al simplificar la consulta eliminaste la verdadera causa del error:-)
¿Qué versión de Oracle estás usando? Oracle 10g (10.2.0.1.0) da:
create table parts (ptno number, ptnm number, catcd number);
create table CATEGORIES (catcd number);
select PTNO,PTNM,CATCD from PARTS
left join CATEGORIES on (CATEGORIES.CATCD=PARTS.CATCD);
Obtengo ORA-00918: columna definida de forma ambigua
No hay comentarios:
Publicar un comentario