Columnas con el mismo nombre pueden aparecer en las tablas
involucradas en un Join. Los nombres de las columnas DEPARTMENT_ID y MANAGER_ID
se encuentran en las tablas EMPLOYEES y DEPARTMENTS. La columna REGION_ID está
presente en las tablas REGIONS y COUNTRIES. Listar tales columnas en una
consulta será un problema cuando Oracle no pueda resolver su origen. Columnas con
nombre único en un Join no causa ambigüedad y Oracle puede fácilmente resolver su Tabla fuente.
El problema de nombres de columnas ambiguos es resuelto mediante la notación
de punto. Una columna puede ser prefijada con el nombre de su tabla a la cual
pertenece seguido de un punto. Esto diferencia las columnas de una o de otra
tabla. Notación de punto puede ser utilizada en consultas que involucran
cualquier número de tablas. Referenciar algunas columnas no implica que todas
las columnas deban ser referenciadas
Notación de Punto es mejorada con alias en las tablas. Un Alias de
Tabla provee un nombre alternativo, usualmente un nombre corto para una tabla. Una
columna puede ser referenciada como TABLE_NAME.COLUMN_NAME o
TABLE_ALIAS.COLUM_NAME.
-- EJEMPLO Y NOTAS IMPORTANTES DE COLUMNAS AMBIGUAS
-- EN ESTE EJEMPLO LA TABLA EMPLOYEES Y LA TABLE DEPARTMENT COMPARTEN
LOS
-- MISMO NOMBRES DE COLUMNAS: MANAGER_ID Y DEPARMENT_ID
-- REALIZAMOS UN JOIN USING PARA ENCONTRAR EL NOMBRE DEL DEPARTAMENTO
-- AL CUAL PERTENECE CADA EMPLEADO. LE COLOCAMOS UN ALIAS A LA TABLA
EMPLOYEES
-- 1. Este ejemplo provoca un error debido a que estamos cualificando
la columna
-- deparment_id y la cual es la que esta realizando el JOIN como regla
las columnas
-- que participen en el JOIN no deben cualificarse.
-- Incorrecto
SELECT e.employee_id, e.first_name, e.manager_id, e.department_id,
d.department_id, d.department_name, d.manager_id
FROM employees e
JOIN departments d USING
(department_id);
-- Correcto
SELECT e.employee_id, e.first_name, e.manager_id, department_id,
d.department_name, d.manager_id
FROM employees e
JOIN departments d USING
(department_id);
-- 2. En este ejemplo provoca un error debido a que hay una columna
ambigua en las dos tablas
-- la cual es MANAGER_ID esta
aparece en las dos tablas y no se encuentra participando en la
-- clausula JOIN y oracle no
puede definir su origen
-- Incorrecto
SELECT e.employee_id, e.first_name, manager_id, department_id,
d.department_name
FROM employees e
JOIN departments d USING
(department_id);
-- Correcto
SELECT e.employee_id, e.first_name, e.manager_id, department_id,
d.department_name
FROM employees e
JOIN departments d USING
(department_id);
-- Como conclusion columnas que comparten el mismo nombre en ambas
tablas que participan en un
-- join y que no estan en la clausula JOIN deben ser cualificadas con
su nombre de tabla.
-- Columnas que comparten el mismo nombre en ambas tablas que participan
en un join y que estan
-- en la clausula join no deben ser cualificadas.
Cualificar las columnas con sus tablas a las cuales pertenece ayuda a
mejorar el rendimiento de Oracle ya que Oracle no perderá tiempo resolviendo el
origen de cada columna.
Comentarios
Publicar un comentario