Newsgrupos.com  

Retroceder   Newsgrupos.com > Forum > Newsgroup microsoft.public.es.* 1 Foro > Newsgroup microsoft.public.es.sqlserver
Registrarse Preguntas Frecuentes Lista de Foreros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




Respuesta
 
LinkBack Herramientas Desplegado
  #1 (permalink)  
Antiguo 27-06-2008, 09:35:08
Don Juan
 
Mensajes: n/a
Predeterminado Comparar dos tablas

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!

Responder Con Cita
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Newsgrupos.com
Standard Sponsored Links

  #2 (permalink)  
Antiguo 27-06-2008, 14:43:03
Alejandro Mesa
 
Mensajes: n/a
Predeterminado RE: Comparar dos tablas

Don Juan,

Usa el operador "exists".

select codigo, accesorio
from t1
where not exists (
select *
from t2
where t2.codigo = t1.codigo
)
GO


AMB

"Don Juan" wrote:

> Hola a todos
> Necesito hacer una query de comparacin 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 cdigo en comn, y AccesorioMas es la comparacin
> entre T1 y T2 que responde a la pregunta:
> Cuntos Accesorios de T1 (del producto en question) NO EXISTEN en T2?
>
> 1000 Gracias por su valiosa ayuda!
>

Responder Con Cita
  #3 (permalink)  
Antiguo 27-06-2008, 17:09:02
rafaelSC
 
Mensajes: n/a
Predeterminado RE: Comparar dos tablas

Holas, con todos.

Alejandro, lamentablemente tu respuesta no funciona.

Juan, prueba esto por favor:

create table t1 (
codigo int,
accesorio int
)
go

create table t2 (
codigo int,
accesorio int
)
go

insert t1 values(1,1)
insert t1 values(1,2)
insert t1 values(1,3)
insert t1 values(1,4)
insert t1 values(2,1)
insert t1 values(3,1)
insert t1 values(3,2)

insert t2 values(1,1)
insert t2 values(1,2)
insert t2 values(2,1)
insert t2 values(3,1)


select t1.codigo,count(*) as accesorioMas
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

Espero que te sirva.

Salu2

Victor
Lima, Peru

"Alejandro Mesa" wrote:

> Don Juan,
>
> Usa el operador "exists".
>
> select codigo, accesorio
> from t1
> where not exists (
> select *
> from t2
> where t2.codigo = t1.codigo
> )
> GO
>
>
> AMB
>
> "Don Juan" wrote:
>
> > Hola a todos
> > Necesito hacer una query de comparacin 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 cdigo en comn, y AccesorioMas es la comparacin
> > entre T1 y T2 que responde a la pregunta:
> > Cuntos Accesorios de T1 (del producto en question) NO EXISTEN en T2?
> >
> > 1000 Gracias por su valiosa ayuda!
> >

Responder Con Cita
  #4 (permalink)  
Antiguo 27-06-2008, 18:21:00
Alejandro Mesa
 
Mensajes: n/a
Predeterminado RE: Comparar dos tablas

rafaelSC,

Si la condicion de busqueda / comparacion debe usar ambas columnas, entonces
adiciona tambien [accesorio] en la clausula "where" de el query
correlacionado. Yo no inclui la funcionalidad de contar cuantos deben ser
agregados, solo le di una idea de como atacar el problema. Aqui tienes el
query rectificado.

select codigo, COUNT(*) AS cnt
from t1
where not exists (
select *
from t2
where t2.codigo = t1.codigo AND t2.accesorio = t1.accesorio
)
group by t1.codigo
GO

A proposito, tu query da resultados raros de acuerdo a la data de ejemplo.
Fijate en el codigo 1 por ejemplo:

> insert t1 values(1,1)
> insert t1 values(1,2)
> insert t1 values(1,3)
> insert t1 values(1,4)


> insert t2 values(1,1)
> insert t2 values(1,2)


Cuantas filas en t1 no estan en t2, usando ambas columnas en la busqueda o
comparacion?

Solo dos {(1, 3), (1, 4)}, correcto?

Tu query devuelve "accesorioMas = 4", debido a que en la union usas solo la
columna [codigo].


AMB



"rafaelSC" wrote:

> Holas, con todos.
>
> Alejandro, lamentablemente tu respuesta no funciona.
>
> Juan, prueba esto por favor:
>
> create table t1 (
> codigo int,
> accesorio int
> )
> go
>
> create table t2 (
> codigo int,
> accesorio int
> )
> go
>
> insert t1 values(1,1)
> insert t1 values(1,2)
> insert t1 values(1,3)
> insert t1 values(1,4)
> insert t1 values(2,1)
> insert t1 values(3,1)
> insert t1 values(3,2)
>
> insert t2 values(1,1)
> insert t2 values(1,2)
> insert t2 values(2,1)
> insert t2 values(3,1)
>
>
> select t1.codigo,count(*) as accesorioMas
> 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
>
> Espero que te sirva.
>
> Salu2
>
> Victor
> Lima, Peru
>
> "Alejandro Mesa" wrote:
>
> > Don Juan,
> >
> > Usa el operador "exists".
> >
> > select codigo, accesorio
> > from t1
> > where not exists (
> > select *
> > from t2
> > where t2.codigo = t1.codigo
> > )
> > GO
> >
> >
> > AMB
> >
> > "Don Juan" wrote:
> >
> > > Hola a todos
> > > Necesito hacer una query de comparacin 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 cdigo en comn, y AccesorioMas es la comparacin
> > > entre T1 y T2 que responde a la pregunta:
> > > Cuntos Accesorios de T1 (del producto en question) NO EXISTEN en T2?
> > >
> > > 1000 Gracias por su valiosa ayuda!
> > >

Responder Con Cita
  #5 (permalink)  
Antiguo 27-06-2008, 20:34:38
rafaelSC
 
Mensajes: n/a
Predeterminado RE: Comparar dos tablas

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

Salu2

Victor
Lima, Peru

"Alejandro Mesa" wrote:

> rafaelSC,
>
> Si la condicion de busqueda / comparacion debe usar ambas columnas, entonces
> adiciona tambien [accesorio] en la clausula "where" de el query
> correlacionado. Yo no inclui la funcionalidad de contar cuantos deben ser
> agregados, solo le di una idea de como atacar el problema. Aqui tienes el
> query rectificado.
>
> select codigo, COUNT(*) AS cnt
> from t1
> where not exists (
> select *
> from t2
> where t2.codigo = t1.codigo AND t2.accesorio = t1.accesorio
> )
> group by t1.codigo
> GO
>
> A proposito, tu query da resultados raros de acuerdo a la data de ejemplo.
> Fijate en el codigo 1 por ejemplo:
>
> > insert t1 values(1,1)
> > insert t1 values(1,2)
> > insert t1 values(1,3)
> > insert t1 values(1,4)

>
> > insert t2 values(1,1)
> > insert t2 values(1,2)

>
> Cuantas filas en t1 no estan en t2, usando ambas columnas en la busqueda o
> comparacion?
>
> Solo dos {(1, 3), (1, 4)}, correcto?
>
> Tu query devuelve "accesorioMas = 4", debido a que en la union usas solo la
> columna [codigo].
>
>
> AMB
>
>
>
> "rafaelSC" wrote:
>
> > Holas, con todos.
> >
> > Alejandro, lamentablemente tu respuesta no funciona.
> >
> > Juan, prueba esto por favor:
> >
> > create table t1 (
> > codigo int,
> > accesorio int
> > )
> > go
> >
> > create table t2 (
> > codigo int,
> > accesorio int
> > )
> > go
> >
> > insert t1 values(1,1)
> > insert t1 values(1,2)
> > insert t1 values(1,3)
> > insert t1 values(1,4)
> > insert t1 values(2,1)
> > insert t1 values(3,1)
> > insert t1 values(3,2)
> >
> > insert t2 values(1,1)
> > insert t2 values(1,2)
> > insert t2 values(2,1)
> > insert t2 values(3,1)
> >
> >
> > select t1.codigo,count(*) as accesorioMas
> > 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
> >
> > Espero que te sirva.
> >
> > Salu2
> >
> > Victor
> > Lima, Peru
> >
> > "Alejandro Mesa" wrote:
> >
> > > Don Juan,
> > >
> > > Usa el operador "exists".
> > >
> > > select codigo, accesorio
> > > from t1
> > > where not exists (
> > > select *
> > > from t2
> > > where t2.codigo = t1.codigo
> > > )
> > > GO
> > >
> > >
> > > AMB
> > >
> > > "Don Juan" wrote:
> > >
> > > > Hola a todos
> > > > Necesito hacer una query de comparacin 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 cdigo en comn, y AccesorioMas es la comparacin
> > > > entre T1 y T2 que responde a la pregunta:
> > > > Cuntos Accesorios de T1 (del producto en question) NO EXISTEN en T2?
> > > >
> > > > 1000 Gracias por su valiosa ayuda!
> > > >

Responder Con Cita
  #6 (permalink)  
Antiguo 28-06-2008, 07:14:23
Carlos M. Calvelo
 
Mensajes: n/a
Predeterminado Re: Comparar dos tablas

Hola Victor,

On 27 jun, 21:34, rafaelSC <rafae...***discussions.microsoft.com> 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

Responder Con Cita
  #7 (permalink)  
Antiguo 28-06-2008, 15:34:00
rafaelSC
 
Mensajes: n/a
Predeterminado Re: Comparar dos tablas

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 <rafae...***discussions.microsoft.com> 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
>
>

Responder Con Cita
  #8 (permalink)  
Antiguo 28-06-2008, 16:01:15
Carlos M. Calvelo
 
Mensajes: n/a
Predeterminado Re: Comparar dos tablas

Hola Victor,

On 28 jun, 16:34, rafaelSC <rafae...***discussions.microsoft.com> 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

Responder Con Cita
  #9 (permalink)  
Antiguo 28-06-2008, 16:31:01
rafaelSC
 
Mensajes: n/a
Predeterminado Re: Comparar dos tablas

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 <rafae...***discussions.microsoft.com> 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
>
>

Responder Con Cita
  #10 (permalink)  
Antiguo 28-06-2008, 16:43:29
Carlos M. Calvelo
 
Mensajes: n/a
Predeterminado Re: Comparar dos tablas

On 28 jun, 17:31, rafaelSC <rafae...***discussions.microsoft.com> 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

Responder Con Cita
 
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comparar Campos Tablas y añadir los nuevos. ElTurle Newsgroup microsoft.public.es.access 2 29-04-2008 23:21:02
Consulta, comparar tablas Joel John Newsgroup microsoft.public.es.access 4 01-01-2008 12:27:20
Importar tablas de Excel (.XLS) a tablas de Visual FoxPro Faiverlgr Newsgroup microsoft.public.es.vfoxpro.datos 10 07-03-2007 15:57:57
Comparar dos tablas Otto Pérez Newsgroup microsoft.public.es.vfoxpro.datos 0 20-07-2006 04:11:14
Funcion para comparar 2 tablas? Dj Blaster Newsgroup microsoft.public.es.vfoxpro.datos 0 09-06-2006 23:51:34





Powered by: vBulletin, Versión 3.6.8
Derechos de Autor ©2000 - 2009, Jelsoft Enterprises Ltd.

LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc.