2013-05-10 49 views
-2

我有一個查詢:MySQL查詢返回無效條款錯誤

SELECT 
    f.name as f_name, 
    f.address as f_address, 
    f.business as f_business, 
    f.web as f_web, 
    f.id_service as f_id_service, 
    f.id_city as f_id_city, 
    f.id_firm as f_id_firm, 
    f.phone as f_phone, 
    p.name as p_name 
FROM Firm f 
    left join Price p on p.id_service=f.id_service 
    AND p.id_city=f.id_city AND p.id_firm=f.id_firm 
WHERE 
    p.id_city='73041' AND 
    p.include='1' AND 
    p.blocked='0' AND 
    f.blocked='0'AND 
    p.id_group='44' AND 
    p.id_subgroup='369' 
Group by 
    f.name 
ORDER by 
    f.name ASC 

我得到以下錯誤:

Msg 8120, Level 16, State 1, Line 4 
Column 'Firm.address' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

爲什麼我得到這個,我該如何解決?

+7

,因爲它不是在聚合函數或GROUP包含你得到錯誤,因爲列「Firm.address」在選擇列表中無效BY子句。 – Arvo 2013-05-10 08:39:32

+0

閱讀並嘗試理解您收到的錯誤消息。這是相當大的機會問題是在那裏陳述... – 2013-05-10 09:33:16

回答

2

你應該考慮給你的問題一個更好的標題..

您不能訪問,這不是在GROUP BY在選擇列(您可能必須把他們像MIN聚合函數(... )或MAX(...))。

我不確定爲什麼你在查詢中有GROUP BY,因爲你沒有做任何聚合?

您可能想要一起刪除GROUP BY。 您可能希望將所有列都放在GROUP BY中。 或者您可能希望刪除該組,並在SQL中的SELECT(刪除GROUP BY將爲每行提供一個結果)後添加一個DISTINCT子句。

我的猜測是,你希望像這樣的SQL:

SELECT 
    f.name as f_name, 
    f.address as f_address, 
    f.business as f_business, 
    f.web as f_web, 
    f.id_service as f_id_service, 
    f.id_city as f_id_city, 
    f.id_firm as f_id_firm, 
    f.phone as f_phone, 
    p.name as p_name, 
    SUM(p.SOMEKIND_OF_COLUMN) as sumOfPrice 
FROM Firm f 
    left join Price p on p.id_service=f.id_service 
     AND p.id_city=f.id_city AND p.id_firm=f.id_firm 
WHERE p.id_city='73041' AND p.include='1' AND p.blocked='0' AND f.blocked='0' 
    AND p.id_group='44' AND p.id_subgroup='369' 
Group by 
    f.name, 
    f.address, 
    f.business , 
    f.web, 
    f.id_service , 
    f.id_city , 
    f.id_firm , 
    f.phone , 
    p.name 
ORDER by f.name ASC 
+0

一個更好的標題已被給予:) – imulsion 2013-05-10 09:50:06

+0

,但我得不到口音f.name ... 請查看圖像與結果查詢http://imageshack.us/photo/ my-images/838/66692436.png – 2013-05-10 16:16:17

+0

如果GROUP BY中的其中一列具有不同的值,它將得到自己的一行。也許你不想在(和select中)組中選擇p.name?很難說,因爲我真的不知道你期待的結果或你正在查詢的原因。 – 2013-05-11 21:44:26