consultas: Comparaciones entre tablas...

20/05/2005 - 10:42 por Daniel Rodriguez | Informe spam
Hola a todos

Os explico un poco el escenario de mi consulta.

Tengo 2 tablas con la siguiente estructura: (con un numero alto de
registros)

TABLA1 --> Id1 | IdAlmacen | IdLibro | Version
TABLA2 --> Id2 | IdAlmacen | IdLibro | Version


Lo que quiero es compararlas entre ellas para poder obtener los
IdLibro de la tabla1 que no estan en la tabla2, o que estando, tienen
diferente version, para un IdAlmacen determinado.

Por ejemplo:
Tabla1
Id1 | IdAlmacen | IdLibro | Version
1 1 1 0
2 1 2 0
3 1 3 1
4 1 4 0
5 1 5 1
6 2 1 0
7 2 10 0
8 3 11 0


Tabla2
Id2 | IdAlmacen | IdLibro | Version
1 1 1 0
2 1 2 0
3 1 3 0
4 1 5 0
5 1 6 0
6 2 1 0
7 2 10 0

Ahora, por ejemplo, quiero comparar el IdAlmacen=1
El resultado debe ser algo asi:

IdAlmacen | IdLibro | Version
1 3 1 < El libro esta en las
dos tablas, pero tiene diferente version
1 4 0 <-- El libro esta en
Tabla1 pero no en tabla2
1 5 1 < El libro esta en las
dos tablas, pero tiene diferente version

* El libro 6 del almacen 1 no debe salir porque no esta en la tabla1 aunque
este en la tabla2

Ahora, por ejemplo, quiero comparar el IdAlmacen=2
El resultado debe ser algo asi:

IdAlmacen | IdLibro | Version
<-- No hay nada ni
nuevo ni con version diferente en Tabla1 en el Almacen2

Ahora, por ejemplo, quiero comparar el IdAlmacen=3
El resultado debe ser algo asi:

IdAlmacen | IdLibro | Version
3 11 0 < El libro esta en las
dos tablas, pero tiene diferente version


En definitiva, quiero comparar libros del mismo almacen en las dos tablas,
tomando como referencia la tabla1.

He logrado hacerlo mediante SELECT ... WHERE ... NOT IN ETC
pero estoy seguro de que se puede hacer mediante joins de manera mas
efectiva.

Si se os ocurre algo, estare muy agradecido si lo compartis conmigo ;)))

Espero haberme explicado un poco... ;)

Muchas gracias anticipadas.
 

Leer las respuestas

#1 Alejandro Mesa
20/05/2005 - 14:39 | Informe spam
Trata,

declare @IdAlmacen int

set @IdAlmacen = 2

select
t1.*
from
tabla1 as t1
left join
tabla2 as t2
on t1.id1 = t2.id2
where

t2.id2 is null

union all

select
t1.*
from
tabla1 as t1
inner join
tabla2 as t2
on t1.id1 = t2.id2 and t1.IdAlmacen = t2.IdAlmacen and t1.Version !=
t2.Version
where
t1.IdAlmacen = @IdAlmacen

Si quieres hacerlo para todos los almacenes, entonces elimina la expresion
"t1.IdAlmacen = @IdAlmacen" en ambas sentencias select.


AMB


"Daniel Rodriguez" wrote:

Hola a todos

Os explico un poco el escenario de mi consulta.

Tengo 2 tablas con la siguiente estructura: (con un numero alto de
registros)

TABLA1 --> Id1 | IdAlmacen | IdLibro | Version
TABLA2 --> Id2 | IdAlmacen | IdLibro | Version


Lo que quiero es compararlas entre ellas para poder obtener los
IdLibro de la tabla1 que no estan en la tabla2, o que estando, tienen
diferente version, para un IdAlmacen determinado.

Por ejemplo:
Tabla1
Id1 | IdAlmacen | IdLibro | Version
1 1 1 0
2 1 2 0
3 1 3 1
4 1 4 0
5 1 5 1
6 2 1 0
7 2 10 0
8 3 11 0


Tabla2
Id2 | IdAlmacen | IdLibro | Version
1 1 1 0
2 1 2 0
3 1 3 0
4 1 5 0
5 1 6 0
6 2 1 0
7 2 10 0

Ahora, por ejemplo, quiero comparar el IdAlmacen=1
El resultado debe ser algo asi:

IdAlmacen | IdLibro | Version
1 3 1 < El libro esta en las
dos tablas, pero tiene diferente version
1 4 0 <-- El libro esta en
Tabla1 pero no en tabla2
1 5 1 < El libro esta en las
dos tablas, pero tiene diferente version

* El libro 6 del almacen 1 no debe salir porque no esta en la tabla1 aunque
este en la tabla2

Ahora, por ejemplo, quiero comparar el IdAlmacen=2
El resultado debe ser algo asi:

IdAlmacen | IdLibro | Version
<-- No hay nada ni
nuevo ni con version diferente en Tabla1 en el Almacen2

Ahora, por ejemplo, quiero comparar el IdAlmacen=3
El resultado debe ser algo asi:

IdAlmacen | IdLibro | Version
3 11 0 < El libro esta en las
dos tablas, pero tiene diferente version


En definitiva, quiero comparar libros del mismo almacen en las dos tablas,
tomando como referencia la tabla1.

He logrado hacerlo mediante SELECT ... WHERE ... NOT IN ETC
pero estoy seguro de que se puede hacer mediante joins de manera mas
efectiva.

Si se os ocurre algo, estare muy agradecido si lo compartis conmigo ;)))

Espero haberme explicado un poco... ;)

Muchas gracias anticipadas.




Preguntas similares