Ver Mensaje Individual
  #12 (permalink)  
Antiguo 07/12/2013, 15:09
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Mostrar meses adeudados

Bueno, ahora es un poco más clara la cosa, y sí se ve el problema, aunque... sigues poniendo la consulta incompleta.
¿Por qué lo digo? Porque después del último campo hay una coma, cosa que parece mostrar que has tratado de quitar algo
Será bueno que te evites tantas cosas y cuando se te pida algo, lo hagas compelto... Pero bueno...

Volviendo al punto, tu problema es que estás ordenando mal las tablas...
LEFT JOIN devuelve todo lo que está en la primer tabla (a la izquierda) esté o no relacionado con la segunda (a la derecha), por lo que en tu caso estás relacionando los PAGOS con las CUOTAS a pagar, y si hay un pago... siempre habrá una cuota. Por eso no te devuelve nada (y además esa consulta está espantosamente mal escrita).

Este detalle no se ve en realidad a menos que postees el código real, porque en ese "ejemplo", no queda definido cual es una y cual es otra.
¿Entiendes ahora por qué ver la consulta real es importante?

Bueno, en general la cosa es simple: Debes dar vuelta las tablas (o usar RIGHT JOIN, pero no te lo aconsejo, porque en este momento sólo te confudira):

Código SQL:
Ver original
  1. SELECT C.mes, (acá el resto de lo que has omitido)
  2. FROM cuotas C LEFT JOIN pagos P ON C.ncuota=P.ncuota
  3. WHERE P.ncuota IS NULL

Por otro lado, yo veo un serio error de diseño en las tablas, porque el PAGO no tiene por qué llevar los datos del cliente o asociado. Eso debe estar en una tabla aparte y en todo caso debería estar en el plan de cuotas, y no en el de pago, ya que un pago pertenece siempre a la cuota y el de un mismo asociado, por transitividad se obtiene de allí el apellido. Eso implica que hay una relación de dependencia... y que estás haciendo redundancia de información, lo que es peligroso.

Yo la plantearía así, suponiendo que lo que tengas sea una relación entre cuotas a pagar y asociados:

Código SQL:
Ver original
  1. SELECT A.Apellido, C.mes, (acá el resto de lo que has omitido)
  2. FROM asociados A INNER JOIN cuotas C ON A.asocId = C.AsocId
  3. LEFT JOIN pagos P ON C.ncuota=P.ncuota
  4. WHERE P.ncuota IS NULL

Como sea, para ser más preciso necesitaríamos ver el diseño de tablas, pero no viene al caso ahora. Lo que debes tener en cuenta es que cuando usas LEFT JOIN o RIGHT JOIN, el orden de los factores sí altera el producto
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)