• Domingo 22 de Diciembre de 2024, 17:14

Autor Tema:  Restar resultados de dos tablas  (Leído 7144 veces)

intebysa

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Restar resultados de dos tablas
« en: Sábado 25 de Junio de 2011, 18:19 »
0
Buen dia señores de antemano deseo agradecer su valiosa ayuda.

Mi asunto es el siguiente. Tengo dos tablas llamdas Fichas y AccionesEnFichas. Las cuales estan compuestas por las siguientes campos:

Fichas: IdFicha, Categoria

AccionesEnFichas:IdAccionesEnFichas,IdFichas.

Asi por ejemplo si las tablas tuvieran registros estarian como asi:

TABLA FICHAS

IdFicha     Categoria

     1               A

     2               A

     3               B

     4               C

y digamos que la tabla AccionesEnFichas estaria asi:

IdAccionesEnfichas               Idfichas

         100                                  1

         200                                  3

Yo necesito sacar LA CANTIDAD de fichas que no estan presentes en AccionesEnFichas por Categoria(si, asi es por Categoria).

Yo lo hice por separado pero no se como unirlas, miren lo que hice:

Primero, sume todas las fichas en la tabla Fichas que correspondian a esa categoria, de esta manera:

SELECT COUNT(*) FROM Fichas WHERE Fichas.Categoria LIKE '%A%'

El resultado en este cado es 2. Perfecto

Luego me fui a la tabla AccionesEnFichas y sume todas aquellas fichas estaban presentes por categoria. Me quedo de la siguiente forma:

SELECT COUNT(*) FROM AccionesEnFichas,Fichas WHERE AccionesEnFichas.IdFichas=Fichas.IdFichas AND Fichas.FichaAsignada LIKE '%A%'

El resultado en este cado es 1. Perfecto

Esas dos consultas me estan dando la cantidad de registros reales de cada tabla pero no se ahora como restarlos.

No se si hay que usar el Inner Join o algo parecido.

Intente con tambien de esta otra manera manera.
SELECT * FROM Fichas where NOT EXISTS(SELECT * FROM AccionesEnFichas, Fichas WHERE AccionesEnFichas.IdFichas=Fichas.IdFichas AND Fichas.FichaAsignada LIKE '%A%')
Ahi el resultado me dio cero, en vez de darme 1. Pues lo unico que no existe de la tabla Fichas en esa categoria es un registro. Los demas son de otras categrorias.

Espero haberme explicado. Desde ya, agradezco su valiosa ayuda.

Desde ya, agradezco su valiosa ayuda.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Restar resultados de dos tablas
« Respuesta #1 en: Sábado 25 de Junio de 2011, 20:17 »
0
Hola intebysa, te recomiendo que utilices [ code][ /code] (sin espacio en los corchetes) cuando publiques tu codigo, o en el editor utiliza el code, que esta junto al boton de quote, eso mejora la legibilidad del codigo.

Respecto a tu duda, en algunos casos estas utilizando Fichas.categoria y en otros Fichas.FichaAsignada, no se si eso tenga que ver algo.

Suponiendo que fuera categoria y no FichaAsignada, creo que las siguientes consultas te daran el resultado que deseas.

Código: SQL
  1. SELECT * FROM Fichas
  2. WHERE idficha NOT IN
  3. (SELECT fichas.idficha FROM AccionesEnFichas, Fichas
  4. WHERE AccionesEnFichas.IdFichas=Fichas.IdFicha
  5. AND Fichas.categoria LIKE '%A%')
  6. AND categoria LIKE '%A%'
  7.  

Código: SQL
  1. SELECT COUNT(idficha), categoria FROM Fichas
  2. WHERE idficha NOT IN
  3. (SELECT fichas.idficha FROM AccionesEnFichas, Fichas
  4. WHERE AccionesEnFichas.IdFichas=Fichas.IdFicha)
  5. GROUP BY categoria
  6.  

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

intebysa

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Restar resultados de dos tablas
« Respuesta #2 en: Lunes 27 de Junio de 2011, 17:04 »
0
Amigo muchas gracias, realmente no habia usado la clausula NOT IN pero veo que es muy util y parecida a NOT EXISTS. De todas formas me sirvio mucho tu respuesta y efecto tienes toda la razon cuando Fichas.FichaAsignada, se ve que analizaste bien lo que posteé.
Desde Costa RIca, muchas gracias.

Cita de: "ProfesorX"
Hola intebysa, te recomiendo que utilices [ code][ /code] (sin espacio en los corchetes) cuando publiques tu codigo, o en el editor utiliza el code, que esta junto al boton de quote, eso mejora la legibilidad del codigo.

Respecto a tu duda, en algunos casos estas utilizando Fichas.categoria y en otros Fichas.FichaAsignada, no se si eso tenga que ver algo.

Suponiendo que fuera categoria y no FichaAsignada, creo que las siguientes consultas te daran el resultado que deseas.

Código: SQL
  1. SELECT * FROM Fichas
  2. WHERE idficha NOT IN
  3. (SELECT fichas.idficha FROM AccionesEnFichas, Fichas
  4. WHERE AccionesEnFichas.IdFichas=Fichas.IdFicha
  5. AND Fichas.categoria LIKE '%A%')
  6. AND categoria LIKE '%A%'
  7.  

Código: SQL
  1. SELECT COUNT(idficha), categoria FROM Fichas
  2. WHERE idficha NOT IN
  3. (SELECT fichas.idficha FROM AccionesEnFichas, Fichas
  4. WHERE AccionesEnFichas.IdFichas=Fichas.IdFicha)
  5. GROUP BY categoria
  6.  

Saludos :)