【发布时间】:2012-09-08 06:00:20
【问题描述】:
我的 group by 查询在 PHP PDO 中运行良好,但是当我在 mysql ini 中添加“sql_mode = ONLY_FULL_GROUP_BY”时,相同的查询失败并出现错误
SQLSTATE[42000]:语法错误或访问冲突:1055 'db.table.t_date' 不在 GROUP BY 中
实际查询
SELECT
*
FROM
(
SELECT
DATE_FORMAT(t_date, '%b') AS mon,
DATE_FORMAT(t_date, '%Y-%m') AS fy_date,
(SUM(val1) - SUM(val2)) AS net_val
FROM
TABLE
GROUP BY
YEAR(t_date),
MONTH(t_date)
ORDER BY
DATE_FORMAT(t_date, '%Y-%m') DESC
LIMIT 12
) AS tbl
ORDER BY
fy_date
有人能告诉我为什么上面的查询不能用吗
sql_mode = ONLY_FULL_GROUP_BY
【问题讨论】:
-
没试过,但在子查询中将
DATE_FORMAT(t_date, '%b')添加到group by会解决问题吗? -
不,没用:GROUP BYYEAR(t_date), MONTH(t_date), DATE_FORMAT(t_date, '%b')
-
如果我没记错的话,您需要将两个
date_format表达式添加到组中:group by DATE_FORMAT(t_date, '%b'), DATE_FORMAT(t_date, '%Y-%m')因为需要对 所有 非聚合列进行分组。 -
感谢“无名马”,您能否添加您的评论作为答案。我尝试了以下 GROUP BY YEAR(t_date), MONTH(t_date), DATE_FORMAT(t_date, '%b'), DATE_FORMAT(t_date, '%Y-%m') 现在在 STRICT 模式下我没有收到任何语法错误.
标签: php mysql sql pdo mysql-error-1055