查询语句中的sql_mode = only_full_group_by

时间:2017-04-24 12:24:59

标签: php mysql sql

在查询中发现sql_mode = only_full_group_by错误。我尝试了很多方法来修复它。更改sql_mode=''。我仍然收到此错误。

  

PDOException:SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#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

1 个答案:

答案 0 :(得分: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应该来自。

我建议你问另一个问题。提供样本数据(作为查询中的文本表)并清楚地解释您要做的事情。