Left Join

01/02/2006 - 19:17 por Penta | Informe spam
Estimados.
Tengo 3 tablas
Nombre Registros
Tabla1 100
Tabla2 150
Tabla3 500

Pues bien Necesito hacer un left join de Tabla1
Y Obtener los mismos 100 registros

Lo que tengo es:

Select * from Tabla1 A Left Join Tabla2 B
On A.Codigo=B.Codigo -- hasta aqui todo bien me da 100 registros

Pero
Si le agrego
Left Join Tabla3 C
On A.Codigo=C.codigo -- Aca se desarma todo me da como 120 registros

Select * from Tabla1 A Left Join Tabla2 B
On A.Codigo=B.Codigo
Left Join Tabla3 C
On A.Codigo=C.codigo

Que estoy haciendo mal ?

Gracias.

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
01/02/2006 - 22:20 | Informe spam
Penta,

La operacion de "full join" no te ayudaria con tu problema. Esta se usa para
traer todas las filas de ambos lados del operador.

Ejemplo:

create table t1 (
c1 int not null
)

create table t2 (
c1 int not null
)

insert into t1 values(1)
insert into t2 values(2)

select t1.c1 as t1_c1, t2.c1 as t2_c1
from t1 full join t2 on t1.c1 = t2.c1

drop table t1, t2
go

Resultado:

t1_c1 t2_c1
1 null
null 2

si duplicamoes el valor 1 en la tabla t2:

insert into t2 values(1)
insert into t2 values(1)

entonces el resultado seria:

t1_c1 t2_c1
1 1
1 1
null 2

asi que seguirias viendo los duplicados. Lo que puedes hacer es usar una
tabla derivada que traiga la columna de t2 que usas en la union y usar
funciones de grupo para el resto de las columnas de t2. En mis caso solo
tengo una columna pero le podemos agregar otra.

select t1.c1 as t1_c1, t3.c1 as t2_c1
from t1 left outer join (select distinct c1 from t2) as t3 on t1.c1 = t3.c1

t1_c1 t2_c1
1 1
null 2

si la tabla t2 tuviese otra columna que yo quiero tener en el resultado,
entonces tendria que usar una funcion de grupo.

select t1.c1 as t1_c1, t3.c1 as t2_c1, t3.max_c2 as t2_c2
from t1 left outer join (select c1, max(c2) as max_c2 from t2 group by c1)
as t3
on t1.c1 = t3.c1


AMB

"Penta" wrote:

Estimados.
Tengo 3 tablas
Nombre Registros
Tabla1 100
Tabla2 150
Tabla3 500

Pues bien Necesito hacer un left join de Tabla1
Y Obtener los mismos 100 registros

Lo que tengo es:

Select * from Tabla1 A Left Join Tabla2 B
On A.Codigo=B.Codigo -- hasta aqui todo bien me da 100 registros

Pero
Si le agrego
Left Join Tabla3 C
On A.Codigo=C.codigo -- Aca se desarma todo me da como 120 registros

Select * from Tabla1 A Left Join Tabla2 B
On A.Codigo=B.Codigo
Left Join Tabla3 C
On A.Codigo=C.codigo

Que estoy haciendo mal ?

Gracias.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida