SQL JOIN, GROUP BY auf drei Tische zu bekommen Summen

Habe ich geerbt den folgenden DB-design. Tabellen sind:

customers
---------
customerid  
customernumber

invoices
--------
invoiceid  
amount

invoicepayments
---------------
invoicepaymentid  
invoiceid  
paymentid

payments
--------
paymentid  
customerid  
amount

Meine Abfrage zurückgeben muss, invoiceid, ist der Rechnungsbetrag (in der Tabelle "Rechnungen"), und der fällige Betrag (Rechnungsbetrag abzüglich der Zahlungen, die gemacht worden sind in Richtung auf die Rechnung) für einen bestimmten customernumber. Ein Kunde kann mehrere Rechnungen.

Die folgende Abfrage gibt mir die doppelte Datensätze, wenn mehrere Zahlungen auf eine Rechnung:

SELECT i.invoiceid, i.amount, i.amount - p.amount AS amountdue
FROM invoices i
LEFT JOIN invoicepayments ip ON i.invoiceid = ip.invoiceid
LEFT JOIN payments p ON ip.paymentid = p.paymentid
LEFT JOIN customers c ON p.customerid = c.customerid
WHERE c.customernumber = '100'

Wie kann ich dieses Problem lösen?

  • wie viele Zahlungen auf Rechnung Zeilen existieren können, die für eine Rechnung? wie viele Zahlungen vorhanden sein können, für jeden paymentid?
InformationsquelleAutor | 2009-08-06
Schreibe einen Kommentar