MySQL 5.0.12 - 列表不在GROUP BY子句中并包含非聚合列?

时间:2016-08-06 18:36:03

标签: php mysql

为什么我在mysqlnd 5.0.12-dev

下面出现此错误
  

1055 - SELECT列表的表达式#29不在GROUP BY子句中,并且包含非聚合列'db_name.p2.url',它不是

     

在功能上依赖于GROUP BY子句中的列;这是   与sql_mode = only_full_group_by

不兼容

查询:

SELECT p.* , 
    p2.article_id AS parent_id  , 
    p2.url AS parent_url  , 
    p3.article_id AS parent_parent_id  , 
    p3.url AS parent_parent_url  , 
    p3.title AS parent_parent_title   

FROM article AS p  
LEFT JOIN article AS p2  
ON p2.article_id = p.parent_id  
AND p.article_id <> p2.article_id  

LEFT JOIN article AS p3  
ON p3.article_id = p2.parent_id  
AND p2.article_id <> p3.article_id  

WHERE p.url = 'contact'  
AND p.type = 'page'  
AND p.hide = '0'  
GROUP BY p.article_id  
ORDER BY p.backdated_on DESC 

查询在mysqlnd 5.0.11-dev正常

任何想法发生了什么?

2 个答案:

答案 0 :(得分:1)

因为看起来你的group by子句只包含p.article_id 而你的选择

p.* , 
    p2.article_id AS parent_id  , 
    p2.url AS parent_url  , 
    p3.article_id AS parent_parent_id  , 
    p3.url AS parent_parent_url  , 
    p3.title AS parent_parent_title

包括group by中的所有select查询列或将它们包含在聚合函数中,例如sum(),count(),max()等。 你真的想从这个查询中得到什么?

答案 1 :(得分:1)

错误很明显:

  

在功能上依赖于GROUP BY子句中的列;这是   与sql_mode = only_full_group_by

不兼容

默认情况下,MySQL允许查询结构。当您的服务器更新时,有人(明智地,恕我直言)设置了SQL模式,因此引擎不支持此功能。

目前还不清楚你想做什么。但我猜测GROUP BY甚至没有必要:

SELECT p.* , 
       p2.article_id AS parent_id  , 
       p2.url AS parent_url  , 
       p3.article_id AS parent_parent_id  , 
       p3.url AS parent_parent_url  , 
       p3.title AS parent_parent_title   
FROM article p LEFT JOIN
     article p2  
     ON p2.article_id = p.parent_id AND
     p.article_id <> p2.article_id LEFT JOIN
     article p3  
     ON p3.article_id = p2.parent_id AND
     p2.article_id <> p3.article_id  
WHERE p.url = 'contact' AND p.type = 'page' AND p.hide = '0'  
ORDER BY p.backdated_on DESC ;

如果您以某种方式获得重复项,那么您可能需要SELECT DISTINCT

如果仍然无法解决您的问题,请询问另一个问题(因为这个问题已经有多个答案可以解决问题中的语法问题)。提供样本数据和所需结果,以及您开始工作的查询。