2017-02-07 6 views
0

Eine Kundentabelle als BeispielSQL Query für die Datenkonsolidierung aus zwei Tabellen

CREATE TABLE customer (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(20)); 
CREATE TABLE payments (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    customer_id INT(11), 
    month INT(2), 
    year INT(4), 
    amount INT(5), 
    FOREIGN KEY fk_cust(customer_id) 
    REFERENCES customer(id)); 

Die Zahlungen Tabelle enthält Informationen über den Monat, Jahr und Höhe der Zahlung durch die Kunden.

Ich habe Probleme beim Schreiben einer SELECT-Abfrage. Das Ergebnis sollte alle Monate eines bestimmten Jahres für alle Kunden enthalten. Wenn der Kunde für einen bestimmten Monat keine Zahlung geleistet hat, sollte die Zahlungsspalte für diesen Monat NULL sein.

SELECT * FROM customers c 
LEFT JOIN payments p ON c.id = p.customer_id AND p.year = 2017 

Wenn ich die obige Abfrage ausführen, bekomme ich nur Zeilen, die Monate mit Zahlungen haben.

Ich entschuldige mich im Voraus für etwaige Fehler (ich bin neu in MySQL und StackOverflow).

EDIT: Die Abfrage sollte Einträge für Monate zurückgeben, wo Zahlungen nicht vorhanden sind. Beispiel: Wenn ein Kunde nur im Juni eine Zahlung getätigt hat, sollte die Abfrage auch für andere Monate Einträge mit einem NULL-Wert als Zahlungen zurückgeben.

+0

Normalerweise würden Sie die Logik der fehlenden Ergebnisse verarbeiten (für die wir wissen, die Zahlung von 0 ist) in den Anwendungscode, z.B. eine einfache PHP-Schleife. – Strawberry

+0

Siehe hierzu: http://stackoverflow.com/documentation/sql/261/join#t=201701310703048805128 –

Antwort

-1

Es ist eigentlich das Gegenteil kommen:

Select * from payments p 
    left join customers c 
     on p.customer_id = c.id 
Verwandte Themen