2012-06-19 64 views
0

我一直在使用簡單的MySQL命令多年,並希望進入更復雜的。我已經完成了重寫一些舊代碼的任務,但是我看不到這裏發生了什麼。沒有MySQL結果,直到在指定的地方

我想將兩個表合併成一個reults,第二個表只提供一個「count」。

TABLE customers: 
customerID, name, boxID 
TABLE codes: 
boxID, code, retrieved 

我要的是什麼,我從一個SELECT * FROM得到客戶,但我想這對於在代碼表中的所有碼數(),其中boxID是相同的一個額外的列。

這是我當前的查詢;

SELECT customers.*, count(codes.code) as codesused 
FROM customers 
INNER JOIN codes 
ON customers.boxID = codes.boxID 
WHERE codes.retrieved = 1 

在我添加「WHERE customers.customerID ='x'」之前,這會導致NULL。任何人都可以解釋爲什麼我無法從上面的代碼中得到我想要的?

+2

您可以創建在http://sqlfiddle.com/一個示例場景,您可以在這裏聯繫我們。 – biziclop

回答

5

當你把聚合函數和其他字段結合起來時,你必須使用group by子句。你可以像這樣做你的查詢;

SELECT customerID, name, boxID, count(codes.code) as codesused 
FROM customers 
INNER JOIN codes ON customers.boxID = codes.boxID 
GROUP BY customerID, name, boxID, codesused 
HAVING codes.retrieved = 1 

而且你不能使用WHERE子句與組,所以你必須使用具有

+0

啊,忘記了GROUP BY,你在那裏是正確的。 'codes_retrieved = 1'雖然可能會加入'ON'狀態,但我會留下來澄清OP。 – Wrikken

+0

感謝您的回覆,我會測試它的工作並驗證您的答案。從邏輯上看,似乎完好無損。移到不久完成的代碼的另一部分。 – darioml

+0

除了HAVING子句之外,一切都有效。基本上,count()中應該包含的唯一代碼是在codes子句中檢索到的代碼。 – darioml