为什么我在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
上正常。
任何想法发生了什么?
答案 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
。
如果仍然无法解决您的问题,请询问另一个问题(因为这个问题已经有多个答案可以解决问题中的语法问题)。提供样本数据和所需结果,以及您开始工作的查询。