![]() |
| |||
| 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! |
| | ||||
| ||||
| |
| |||
| 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! > |
| |||
| 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! > > |
| |||
| 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! > > > |
| |||
| 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! > > > > |
| |||
| 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 |
| |||
| 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 > > |
| |||
| 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 |
| |||
| 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 > > |
| |||
| 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 |
| |
| |
![]() |
| Herramientas | |
| Desplegado | |
| |
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 |