2012-05-02 82 views
5

我想創建一個從產品表中獲取產品的查詢,它是類型表中的類型和類別以及產品上的歌曲數量。 但不知何故,這個查詢會引發錯誤。它開始時,我加入count(n.name)無效,因爲它不包含在聚合函數或分組條件中

SELECT p.name, p.publisher, p.description, p.price, p.picture 
    , p.releasedate, t.type, t.category, count(n.name) AS songs 
    FROM Products p 
INNER JOIN ProductType t ON (p.type_id = t.id) 
INNER JOIN Songs n ON (p.id = n.product_id) 

我得到的錯誤是因爲它不是在聚合函數或GROUP BY包含

列「Products.name」在選擇列表中無效條款。

回答

6

只有Songs組行,然後再加入聚合數據,而不是Songs表正確:

SELECT p.name, p.publisher, p.description, p.price, p.picture 
    , p.releasedate, t.type, t.category, n.songs 
    FROM Products p 
INNER JOIN ProductType t ON (p.type_id = t.id) 
INNER JOIN ( SELECT product_id, COUNT(n.name) AS songs FROM Songs GROUP BY product_id ) n ON (p.id = n.product_id) 

這樣,你會避免加入幾乎所有的輸出列到GROUP BY條款,你將不得不在你的問題中發佈的查詢中做。

0
SELECT p.name, p.publisher, p.description, p.price, p.picture, p.releasedate, t.type, t.category, count(1) AS songs 
        FROM Products p 
        INNER JOIN ProductType t ON (p.type_id = t.id) 
        INNER JOIN Songs n ON (p.id = n.product_id) 
GROUP BY p.name, p.publisher, p.description, p.price, p.picture, p.releasedate, t.type, t.category 
+2

也許對於爲什麼*他需要GROUP BY的解釋將到位? –

+0

現在我得到'Te文本,ntext和圖像數據類型無法進行比較或排序,除非使用IS NULL或LIKE運算符。 – Jerodev

+0

好的,你需要一個group by,因爲你在SELECT子句中有一個聚合函數。 –

相關問題