Comparar dos tablas

27/06/2008 - 10:35 por Don Juan | Informe spam
Hola a todos
Necesito hacer una query de comparación entre dos tablas de la misma
estructura:
T1: Codigo Accesorio
T2: Codigo Accesorio
Donde el resultado debe ser este:
Codigo AccesorioMas
1 1
2 4
3 6

En donde codigo es el código en común, y AccesorioMas es la comparación
entre T1 y T2 que responde a la pregunta:
Cuántos Accesorios de T1 (del producto en question) NO EXISTEN en T2?

1000 Gracias por su valiosa ayuda!

Preguntas similare

Leer las respuestas

#6 rafaelSC
28/06/2008 - 16:34 | Informe spam
Hola carlos,
Entendí, que lo que solicitaban era solo los que tenian modificaciones. Lo
otro lo podria ser con una exclusion de los mismos encontrados. Mas tarde
adjunto un ejemplo.

Salu2

Victor
Lima, Peru

"Carlos M. Calvelo" wrote:

Hola Victor,

On 27 jun, 21:34, rafaelSC wrote:
> Tienes razon Alejandro :(
>
> Bueno este si debe funcionar:
>
> select a.codigo,count(*) as accesorioMas
> from (
> select t1.codigo,t1.accesorio
> from t1
> join t2 on t2.codigo=t1.codigo
> where not exists(
> select *
> from t2
> where t2.codigo=t1.codigo and t2.accesorio=t1.accesorio)
> group by t1.codigo,t1.accesorio) a
> group by a.codigo
>

Aun así, con el ejemplo que tu has puesto,
el resultado es:

codigo accesorioMas
1 2
3 1

pero, dada la pregunta de Don Juan, debería ser:

codigo accesorioMas
1 2
2 0
3 1

Saludos,
Carlos


Respuesta Responder a este mensaje
#7 Carlos M. Calvelo
28/06/2008 - 17:01 | Informe spam
Hola Victor,

On 28 jun, 16:34, rafaelSC wrote:
Hola carlos,
Entendí, que lo que solicitaban era solo los que tenian modificaciones. Lo
otro lo podria ser con una exclusion de los mismos encontrados. Mas tarde
adjunto un ejemplo.




No.. si por mí no hace falta! Depende de lo que quiera Don Juan.

Algo quizás a tener también en cuenta es la posibilidad de que
la tabla T1 tenga codigos que no están en T2 y viceversa.

Pero Don Juan no ha explicado nada de eso.
Ya sabes.. preguntas simples dan lugar a respuestas complejas y
preguntas complejas a respuestas simples :-)

Saludos,
Carlos
Respuesta Responder a este mensaje
#8 rafaelSC
28/06/2008 - 17:31 | Informe spam
Completamente de acuerdo contigo Carlos. =)

Bueno hasta que nuestro amigo nos de mas detalle les adjunto el script que
les prometi:

select distinct bb.codigo,coalesce(aa.accesorioMas,0)
from t1 bb
left join (
select a.codigo,count(*) as accesorioMas
from (
select t1.codigo,t1.accesorio
from t1
join t2 on t2.codigo=t1.codigo
where not exists(
select *
from t2
where t2.codigo=t1.codigo and t2.accesorio=t1.accesorio)
group by t1.codigo,t1.accesorio) a
group by a.codigo) aa on aa.codigo=bb.codigo

Salu2

Victor
Lima, Peru


"Carlos M. Calvelo" wrote:

Hola Victor,

On 28 jun, 16:34, rafaelSC wrote:
> Hola carlos,
> Entendí, que lo que solicitaban era solo los que tenian modificaciones. Lo
> otro lo podria ser con una exclusion de los mismos encontrados. Mas tarde
> adjunto un ejemplo.
>

No.. si por mí no hace falta! Depende de lo que quiera Don Juan.

Algo quizás a tener también en cuenta es la posibilidad de que
la tabla T1 tenga codigos que no están en T2 y viceversa.

Pero Don Juan no ha explicado nada de eso.
Ya sabes.. preguntas simples dan lugar a respuestas complejas y
preguntas complejas a respuestas simples :-)

Saludos,
Carlos


Respuesta Responder a este mensaje
#9 Carlos M. Calvelo
28/06/2008 - 17:43 | Informe spam
On 28 jun, 17:31, rafaelSC wrote:
Completamente de acuerdo contigo Carlos. =)

Bueno hasta que nuestro amigo nos de mas detalle les adjunto el script que
les prometi:

select distinct bb.codigo,coalesce(aa.accesorioMas,0)
from t1 bb
left join (
        select a.codigo,count(*) as accesorioMas
        from (
                        select t1.codigo,t1.accesorio
                        from t1
                        join t2 on t2.codigo=t1.codigo
                        where not exists(
                                        select *
                                        from t2
                                        where t2.codigo=t1.codigo and t2.accesorio=t1.accesorio)
                        group by t1.codigo,t1.accesorio) a
        group by a.codigo) aa on aa.codigo=bb.codigo

Salu2




Perfecto Victor :-)

Otras opciones:
(la última con una union para juntar todos los codigos de las
dos tablas)



select t11.codigo, count(t22.accesorio) as accesorioMas
from (select distinct codigo from t1) t11
left join
(select codigo, accesorio
from t1
where accesorio not in (select accesorio
from t2
where codigo=t1.codigo)) t22
on t11.codigo=t22.codigo
group by t11.codigo


select t11.codigo, isnull(accMas,0) as accesorioMas
from (select distinct codigo from t1) t11
left join
(select codigo, count(*) as accMas
from t1
where accesorio not in (select accesorio
from t2
where codigo=t1.codigo)
group by codigo) t22
on t11.codigo=t22.codigo

select t11.codigo, isnull(accMas,0) as accesorioMas
from (select codigo from t1 union select codigo from t2) t11
left join
(select codigo, count(*) as accMas
from t1
where accesorio not in (select accesorio
from t2
where codigo=t1.codigo)
group by codigo) t22
on t11.codigo=t22.codigo



Saludos,
Carlos
Respuesta Responder a este mensaje
#10 Don Juan
30/06/2008 - 09:04 | Informe spam
Hola a todos, y gracias por sus valiosas respuestas.
Siento no haber respondido antes :(

He intentado los queries, y funcionan bien, ahora claro, han tocado un buen
punto poque necesito saber cuántos de T1 no existen en T2 y sino cuántos de
T2 no existen en T1, lo he hecho con dos queries (valiéndome del ejemplo que
me enviaron), aunque me hubiese encantado poderlo hacer con un solo... en
fin ahora lo tengo (pero si alquien tiene tiempo para añadir un código en un
sólo query lo agradecería).

1000 gracias por toda su ayuda!.


"Carlos M. Calvelo" wrote in message
news:
Hola Victor,

On 28 jun, 16:34, rafaelSC wrote:
Hola carlos,
Entendí, que lo que solicitaban era solo los que tenian modificaciones. Lo
otro lo podria ser con una exclusion de los mismos encontrados. Mas tarde
adjunto un ejemplo.




No.. si por mí no hace falta! Depende de lo que quiera Don Juan.

Algo quizás a tener también en cuenta es la posibilidad de que
la tabla T1 tenga codigos que no están en T2 y viceversa.

Pero Don Juan no ha explicado nada de eso.
Ya sabes.. preguntas simples dan lugar a respuestas complejas y
preguntas complejas a respuestas simples :-)

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida