2017-09-04 6 views
0

Ich versuche, eine Abfrage zu schreiben, die drei Tabellen verbinden. Wie man auf dem Bild sehen, unten habe ich:Mysql Abfrage drei Tabellen

  • Benutzer Tabelle
  • Aufwendungen Tabelle
  • Aufwandskategorien Tabelle

Ich brauche eine Ergebnistabelle, die Gruppen Ausgaben nach Kategorie Typologie zu erhalten (Ergebnis Tabelle auf dem Bild).

enter image description here

select users.email, 
(
    SELECT IFNULL(sum(expenses.amount),0) 
    FROM expenses 
    JOIN expense_categories as cat 
    ON cat.id = expenses.category_id 
    AND cat.type = 'home' 
    WHERE expenses.user_id = users.id 
) as 'home expenses' 
from users 

Diese Abfrage funktioniert richtig, aber ich bin sicher nicht der richtige Weg, dies zu tun.

Können Sie mir helfen?

Vielen Dank

Antwort

2

Die Abfrage Sie join s und eine Aggregation wollen hat:

SELECT u.id, u.email, 
     SUM(CASE WHEN ec.type = 'home' THEN e.amount ELSE 0 END) as home, 
     SUM(CASE WHEN ec.type = 'job' THEN e.amount ELSE 0 END) as job 
FROM users u LEFT JOIN 
    expenses e 
    ON u.id = e.user_id LEFT JOIN 
    expense_categories ec 
    ON ec.id = e.category_id 
GROUP BY u.id, u.email; 
+0

Danke @Gordon! –