2012-02-26 101 views
1

我有三張表,一個是關於客戶端(名稱,用戶名)的信息,另一個表格是他的汽車執行的服務(從服務中獲得的點數),服務)和一個與公司,代表客戶的工作地點(名稱,地點)。在MySQL查詢中需要幫助

我試圖做一個查詢,在客戶端工作的公司,客戶本人和所有得分的總和。我已經嘗試了幾種方法,但都失敗了。我想要顯示客戶端信息,即使它沒有任何點。

這是我已經嘗試過

SELECT *FROM client c 
     INNER JOIN company b ON c.company_idcompany = b.idcompany 
     INNER JOIN (select sum(pointos) as pointos From services) d 

SELECT *FROM client c 
     INNER JOIN company b ON c.company_idcompany = b.idcompany 
     INNER JOIN service d ON c.idclient = d.client_idclient 

回答

1

您需要對您的聚合查詢進行左連接。如果你是INNER JOIN,它只會返回在服務中有條目的行。沒有服務的客戶將不會被退回。試試這個

SELECT *FROM client c 
    INNER JOIN company b ON c.company_idcompany = b.idcompany 
    LEFT JOIN (select client_idclient,sum(pointos) as pointos From services group by client_idclient) d on c.idclient=d.client_idclient 

如果你需要零而不是NULL,你可以使用IFNULL來轉換點的總和。

+1

多數民衆贊成它。:)謝謝你好,你是一個天才。 – 2012-02-26 14:48:38

+0

@LuisMiguelAlvesCampos嗯,也許不是一個天才,但謝謝你,歡迎來到SO! – liquorvicar 2012-02-26 14:51:49

1

請提供一些更多的表結構的數據(如創建示例腳本)。

我認爲問題在於您必須在加入中使用LEFT JOIN,並且您沒有在第一個查詢的第二個連接語句中提供任何「連接信息」。