2014-07-03 41 views
1

如果客戶ID(KUNDENID)相同,我試圖從表中加總金額。INNER JOIN:加上金額相同的ID

這些是我的兩個表:

+----------+------------+--------+ 
| KUNDENID | datum  | Betrag | 
+----------+------------+--------+ 
|  2 | 2013-06-05 | 120.5 | 
|  1 | 2013-02-05 | 20.95 | 
|  3 | 2013-02-05 | 250.3 | 
|  3 | 2013-05-13 | 100 | 
|  4 | 2013-01-01 | 1500 | 
+----------+------------+--------+ 

+----------+---------+-----------+------------------------------+--------------+-------------+ 
| KUNDENID | vorname | nachname | email      | geburtsdatum | telefon  | 
+----------+---------+-----------+------------------------------+--------------+-------------+ 
|  1 | Homer | Simpson | [email protected]  | 1956-05-02 | 555-364  | 
|  2 | Doug | Heffernan | [email protected] | 1965-02-09 | 555-3684 | 
|  3 | Dexter | Morgan | [email protected]  | 1971-02-01 | 555-3684 | 
|  4 | Sheldon | Cooper | [email protected]  | 1981-04-22 | 555-2274648 | 
|  5 | Maurice | Moss  | [email protected] | 1972-03-01 | 555-6677 | 
+----------+---------+-----------+------------------------------+--------------+-------------+ 

我想這INNER JOIN:

SELECT k.KUNDENID, vorname, nachname, SUM(Betrag) FROM kunde k INNER JOIN verkauf v ON k.KUNDENID = v.KUNDENID GROUP BY k.KUNDENID; 

輸出:

+----------+---------+-----------+------------------+ 
| KUNDENID | vorname | nachname | SUM(Betrag)  | 
+----------+---------+-----------+------------------+ 
|  1 | Homer | Simpson | 20.9500007629395 | 
|  2 | Doug | Heffernan |   120.5 | 
|  3 | Dexter | Morgan | 350.300003051758 | 
|  4 | Sheldon | Cooper |    1500 | 
+----------+---------+-----------+------------------+ 

所以我知道該連接是正確的,但我怎麼能向沒有購買相同JOIN中的任何東西的客戶展示?

我想要的輸出:

+----------+---------+-----------+------------------+ 
| KUNDENID | vorname | nachname | SUM(Betrag)  | 
+----------+---------+-----------+------------------+ 
|  1 | Homer | Simpson | 20.9500007629395 | 
|  2 | Doug | Heffernan |   120.5 | 
|  3 | Dexter | Morgan | 350.300003051758 | 
|  4 | Sheldon | Cooper |    1500 | 
|  5 | Maurice | Moss  |    0 | 
+----------+---------+-----------+------------------+ 

感謝您的幫助!

回答

4

使用LEFT JOIN而不是INNER JOIN

SELECT k.KUNDENID, vorname, nachname, IFNULL(SUM(Betrag), 0) AS gesamt 
    FROM kunde k 
    LEFT JOIN verkauf v ON k.KUNDENID = v.KUNDENID 
    GROUP BY k.KUNDENID; 

這裏的Wikipedia的基本解釋。他們也展示了一個例子。

左外連接的結果(或只是左連接)爲表A和 乙總是包含了「左」表(A)的所有記錄,即使 加盟條件沒有找到任何(B)中的「正確」表 中的匹配記錄。這意味着如果ON子句與B (對於A中的給定記錄)中的0(零)記錄相匹配,則聯接仍將返回 結果中的一行(對於該記錄) - 但B中每列的NULL 。左邊的 外部聯接返回來自內部聯接的所有值以及左表中與右表不匹配的所有值 。

+0

感謝的名字,偉大工程!並且解釋幫助了很多! – BlueFox

2

是的,你可以使用LEFT OUTER JOIN到位內加入喜歡的:

SELECT k.KUNDENID, vorname, nachname, SUM(Betrag) AS Betrag 
FROM kunde k LEFT OUTER JOIN verkauf v 
     ON k.KUNDENID = v.KUNDENID GROUP BY k.KUNDENID; 
1

內加入:查詢表1中的每一行進行比較與表2中的每一行找到所有的行對滿足連接謂詞。

A 左外連接保留「左」表的所有行,而不管是否存在與「右」表匹配的行。

試試這個:

SELECT k.KUNDENID, vorname, nachname, SUM(Betrag) as Betrag 
    FROM kunde k LEFT OUTER JOIN verkauf v 
    ON k.KUNDENID = v.KUNDENID 
    GROUP BY k.KUNDENID; 
+0

謝謝!它工作得很好,我甚至沒有考慮過使用別的Join,所以感謝解釋。 – BlueFox

1

我不知道哪裏是kunde tableverkauf table但櫃面查詢是錯誤或錯誤僅僅指剛切換表

SELECT a.KUNDENID,IFNULL(SUM(b.betrag),0) AS sum , a.nachname FROM kunde a 
LEFT JOIN verkauf b ON b.KUNDENID = a.KUNDENID 
GROUP BY b.KUNDENID 
ORDER BY a.KUNDENID 
+1

謝謝! IFNULL是我一直在尋找的東西! – BlueFox