Cita:
Iniciado por eltodi
Buenas,
en este mi primer mensaje os solicito ayuda con una consulta que se me ha atravesado y no hay forma. Es sobre dos tablas que tienen la siguiente forma:
tabla A:
-idinscrito
-nombre
-email
tabla B:
-idcuota
-idinscrito
-cuota (corresponde al año. 2006, 2007, 2008,...)
-pagado (si o no)
tabla B seria por ej:
1 21 2006 S
2 21 2007 N
3 21 2008 N
4 14 2005 S
5 14 2006 S
6 14 2007 S
7 14 2008 N
la consulta que pretendo es para obtener la gente que tiene cuota=2008 y Pagado=N, pero ojo, que solo deban cuota=2008 ( 2007 pagada=si).....
Creo que no es tan complicada, pero llevo atrancado un rato y no hay forma..
Espero puedan ayudarme.
GRACIAS
Prueba esta consulta, pero revisa antes los nombres de los campos y demás
Código sql:
Ver originalSELECT tablaA.idinscrito, tablaA.nombre, COUNT( * ) AS total
FROM `tablaB`
INNER JOIN tablaA ON tablaA.idinscrito= tablaB.idinscrito
WHERE (tablaB.cuota = '2007'
AND tablaB.pagado = 'S')
OR (tablaB.cuota = '2008'
AND tablaB.pagado = 'N')
GROUP BY tablaB.idinscrito
HAVING total =2
Te explico el método: buscas todos los que tienen pagado 2007 y sin pagar 2008. Luego agrupas por idinscrito y sacas la cuenta. Aquellos que devuelvan un total de dos, es que cumplen ambas condiciones en una sola persona. Esta es una consulta que ciertamente causa más de un problema y hace dudar a los que nos iniciamos en bases de datos sobre la bondad de una estructura relacional tal y como la hemos aprendido, porque pensamos que resultaría más fácil si los datos de los años estuvieran en un mismo registro, pero es un error entenderlo así, al menos esa es mi opinión, porque la estructura que tienes es la correcta, a pesar de esta pequeña dificultad.