2017-04-24 60 views
0

found在查詢中發現sql_mode = only_full_group_by錯誤。我嘗試了很多方法來修復它。changed sql_mode='' .still我得到這個錯誤。sql_mode = only_full_group_by查詢語句

PDOException:SQLSTATE [42000]:語法錯誤或訪問衝突:SELECT列表1055表達#1不處於GROUP BY子句和包含非聚集列「intranet.a.tagid」,這並不功能依賴於列在GROUP BY子句中;這是不兼容的sql_mode = only_full_group_by:

我給表中的字段

table1

table2

SELECT a.tagid,b.tagword,a.metric 
from nextag_metrics a 
    LEFT JOIN nextag_words b ON a.tagid=b.id 
WHERE b.tagword is not NULL 
AND type='filedepot' 
OR groupid in (2931,2938,2941) 
OR userid in (1) 
OR categoryid in (2,3,4,5,6,8,9,10,11) 
GROUP BY b.tagword 
ORDER BY b.tagword ASC 
+0

如何修復查詢本身?您需要按未彙總的所有投影字段進行分組。如果你不明白爲什麼,你可能還沒有真正想到你想要解決的問題。 – Sebas

+0

GROUP BY無效,會在較新版本的MySQL上引發錯誤(除非在兼容模式下),並且在較舊的MySQL版本上返回不可預知的結果。一般的GROUP BY規則說:如果指定了GROUP BY子句,SELECT列表中的每個列引用必須標識一個分組列或者是一個set函數的參數! – jarlh

+0

'select @@ sql_mode;'說什麼? – Alexey

回答

0

這是您的查詢:

SELECT m.tagid, w.tagword, m.metric 
FROM nextag_metrics m LEFT JOIN 
    nextag_words w 
    ON m.tagid = w.id 
WHERE w.tagword is not NULL AND m.type = 'filedepot' OR 
     m.groupid in (2931, 2938, 2941) OR 
     m.userid in (1) OR 
     m.categoryid in (2,3,4,5,6,8,9,10,11) 
GROUP BY w.tagword 
ORDER BY w.tagword ASC; 

此查詢還有其他問題。首先,針對你的特定問題,不要破壞數據庫(只有完整的數據庫應該如何工作)。修復查詢。

這裏有一些其他的問題和潛在的問題:

  • WHERE條款是可疑的。我猜這不是你想要的。
  • 在大多數情況下,在左連接的第二個表上聚集是愚蠢的。值可能是NULL
  • 目前還不清楚tagidmetric應該來自哪一行。

我建議你問另一個的問題。提供樣本數據(作爲查詢中的文本表格),並清楚地解釋您正在嘗試做什麼。