mySQL Left Join sur plusieurs tables avec des conditions

J'ai un problème. J'ai 4 tables:

Invoice_Payment, Facture, Client, et le Calendrier

En gros, j'ai le dessous de la requête, qui fonctionne bien, à l'exception, des mois sans date_due ne reviennent pas. I. E mois seulement avec un date_due sera retourné.

Remarque: le calendrier de table tout simplement des listes de tous les jours de l'année. Il contient un seul col appel date_field

Base de données: http://oberto.co.nz/jInvoice.txt

Résultat attendu: ma requête actuelle, ci-dessous, sera de retour quelque chose comme:

month       total
August      5
September   0
October  196
November  205
December  214
January  229

Avis combien de septembre n'est pas retourné? C'est parce que le tableau Invoice_Payment n'a pas de date_due enregistrement

Je pense que je dois utiliser une jointure gauche et rejoindre le calendrier de table avec quelque chose comme:
LEFT JOIN Calendrier SUR Invoice_Payments.date_paid = Calendrier.date_field. Mais je vais avoir pas de chance

SELECT MONTHNAME(Invoice_Payments.date_paid) as month, SUM(Invoice_Payments.paid_amount) AS total
FROM Invoice, Client, Invoice_Payments
WHERE Client.registered_id = 1
AND Client.id = Invoice.client_id
And Invoice.id = Invoice_Payments.invoice_id
AND date_paid IS NOT NULL
GROUP BY YEAR(Invoice_Payments.date_paid), MONTH(Invoice_Payments.date_paid)

Toute aide appréciée.

  • date_due est dans la table de facture ou invoice_payment table??
  • Je ne vois pas de n'importe où dans la requête de filtrage date_due. vous êtes sûr que c'est pas le retour de ces lignes?
  • Pourquoi serait - gauche rejoindre la calendar tableau de l'aide?
  • date_due est dans le invoice_payment table
  • J'ai pensé à gauche rejoindre le calendrier de table pour montrer tous les mois, même ceux sans une date de paiement
InformationsquelleAutor Jarrod | 2011-01-16