Ver Mensaje Individual
  #26  
Antiguo 23-01-2009
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Reputación: 21
ASAPLTDA Va por buen camino
Join de Tablas

Por favor disculpen la parrafos en mayuscula

Por lo que para este sencillo caso, sería lo mismo o aún mejor hacer...

Código SQL [-]
select h.nopedido, h.codigocliente, c.nombrecliente NOMBRE_CLIENTE, 
from pedidos_header h, clientes c
where c.codigocliente=h.codigocliente
[/quote]

Es cierto que el join de tablas es bueno, pero en algunos casos tienen un limite por ejemplo en la busqueda de valores dependientes de otras tablas o tablas con muchas relaciones externas por ejemplo un maestro de clientes facilmente podria tener 5 a 10 relaciones (Ojo Se que se puede crear con una vista y luego reutilizar la vista)
por Ejemplo asumamos que con el prefijo del telefono puedo encontrar el estado(State) del cliente
Código SQL [-]
CREATE TABLE CLIENTES
 CLIENTE CLIENTE ,
 PREFIJO_TELEFONO,
 CONTINENTE CONTINENTE
 PAIS PAIS
 CIUDAD CIUDAD
CREATE TABLE PAISES
PAIS PAIS
PAIS_NOMBRE
Código SQL [-]
 CREATE TABLE CIUDADES
 CIUDAD CIUDAD
 CIUDAD_NOMBRE
CREATE TABLE EMPLEADOS
EMPLEADO EMPLEADO
PAIS PAIS
CIUDAD CIUDAD


SELECT CLIENTE, PAIS_NOMBRE, CIUDAD_NOMBRE FROM CLIENTES C
LEFT OUTER JOIN PAISES P ON C.PAIS= P.PAIS
LEFT OUTER JOIN CIUDAD X ON X.CIUDAD= C.CIUDAD

y asi podemos complicar un join bastante, pero si hacemos funciones que en el manual dice que son de resultado tabla(VARIAS CAMPOS) PODEMOS HACER LAGO PARECIDO A ESTO OJO SIN PROBAR HE LEIDO EL MANUAL SOLAMENTE
Código SQL [-]
CREATE FUNCTION UBIC GEOGRAFICA(P_PAIS, P_CIUDAD)
RETURNA TABLA
SELECT PAISNOMBRE FROM PAISES INTO O_PAIS_NOMBRE;
SELECT PAISNOMBRE FROM PAISES INTO O_CIUDAD_NOMBRE;
RETURN PAISNOMBRE, CIUDAD_NOMBRE

LA INTRUCCION ANTERIOR QUEDARIA COMO ESTO
Código SQL [-]
 SELECT CLIENTE, UBIC GEOGRAFICA(PAIS,CIUDAD) FROM CLIENTES C

usando la funcion para el maestro de empleados quedaria
Código SQL [-]
 SELECT EMPLEADO, UBIC GEOGRAFICA(PAIS,CIUDAD) FROM EMPLEADOS C
y aqui iniciamos a tener el un mayor poder y ademas reutilizando la mismas funcion, esto msi lo he probado en DB2 del sistema as400 y funciona

Si todo esto es correcto abre nuevas alternativas a la programacion via SQL, esto posiblmente lo tendra firebird en la version 3 pero falta al menos 1 año para poder usarlo

Última edición por ASAPLTDA fecha: 25-01-2009 a las 16:56:06.
Responder Con Cita