MySql Group by 子句中的 5.7.18 错误 sql_mode=only_full_group_by
MySql 5.7.18 error in Group by clause with sql_mode=only_full_group_by
我在 Ubuntu 服务器 16.xx 上 MySql 版本 5.7.18,
我有以下查询:
SELECT DISTINCT
w.sno,
CONCAT(
CONCAT(
(SELECT
bch_lbl
FROM
list_benches
WHERE sno = w.lb_sno),
' => ',
CASE
WHEN w.bench_cat_sno = 0
THEN 'All Categories'
ELSE
(SELECT
cat_name
FROM
case_categories
WHERE sno = w.bench_cat_sno)
END,
' [From ',
b.date_from,
' To ',
b.date_to,
'] '
),
CASE
WHEN b.is_active = 1
THEN 'Active'
ELSE 'Expired'
END
) AS benchLbl,
w.is_active,
b.j_sno
FROM
working_benches w,
bench_judges b
WHERE w.sno = b.b_sno
GROUP BY w.sno
ORDER BY b.is_active DESC ;
执行后,此查询return出现如下错误:
Error Code: 1055
Expression #2 of SELECT list is not in GROUP BY clause and contains
nonaggregated column 'phc_caseflow.b.date_from' which is not functionally
dependent on columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by
我唯一理解的是“sql_mode=only_full_group_by”,它成为上述错误的原因。
任何人都可以建议我如何更改上述查询以适应并解决问题 - 只需要编辑我的查询而不是 sql_mode:
提前致谢...
一开始我看到的问题是您在 SQL 语句中而不是在您的应用程序中格式化结果。
添加诸如“=>”和"From ["、"Active"、"Expired" 之类的内容。这种类型的格式化应该在您的应用程序中完成,而不是在您的 SQL.
我的建议是重新处理查询,删除 CONCAT(当然)和 CASE(如果可能)的使用,并使查询仅 return 您需要的原始数据。
查询正常运行并return处理原始数据后,根据需要在应用程序代码中对其进行格式化。如果这是不可能的,我怀疑您将与这个查询抗争很长时间。
查看所有日志文件和 google 问题后,我发现这是 MySql 版本次要版本中的“BIG”更新,即v 5.7.18。所以,我找到的解决方案是执行以下快捷方式:
sudo nano /etc/mysql/my.cnf
Add this to the end of the file
[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
我的查询 运行 在服务器上非常好,我的意思是在我的生产服务器上...
我在 Ubuntu 服务器 16.xx 上 MySql 版本 5.7.18,
我有以下查询:
SELECT DISTINCT
w.sno,
CONCAT(
CONCAT(
(SELECT
bch_lbl
FROM
list_benches
WHERE sno = w.lb_sno),
' => ',
CASE
WHEN w.bench_cat_sno = 0
THEN 'All Categories'
ELSE
(SELECT
cat_name
FROM
case_categories
WHERE sno = w.bench_cat_sno)
END,
' [From ',
b.date_from,
' To ',
b.date_to,
'] '
),
CASE
WHEN b.is_active = 1
THEN 'Active'
ELSE 'Expired'
END
) AS benchLbl,
w.is_active,
b.j_sno
FROM
working_benches w,
bench_judges b
WHERE w.sno = b.b_sno
GROUP BY w.sno
ORDER BY b.is_active DESC ;
执行后,此查询return出现如下错误:
Error Code: 1055
Expression #2 of SELECT list is not in GROUP BY clause and contains
nonaggregated column 'phc_caseflow.b.date_from' which is not functionally
dependent on columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by
我唯一理解的是“sql_mode=only_full_group_by”,它成为上述错误的原因。
任何人都可以建议我如何更改上述查询以适应并解决问题 - 只需要编辑我的查询而不是 sql_mode:
提前致谢...
一开始我看到的问题是您在 SQL 语句中而不是在您的应用程序中格式化结果。
添加诸如“=>”和"From ["、"Active"、"Expired" 之类的内容。这种类型的格式化应该在您的应用程序中完成,而不是在您的 SQL.
我的建议是重新处理查询,删除 CONCAT(当然)和 CASE(如果可能)的使用,并使查询仅 return 您需要的原始数据。
查询正常运行并return处理原始数据后,根据需要在应用程序代码中对其进行格式化。如果这是不可能的,我怀疑您将与这个查询抗争很长时间。
查看所有日志文件和 google 问题后,我发现这是 MySql 版本次要版本中的“BIG”更新,即v 5.7.18。所以,我找到的解决方案是执行以下快捷方式:
sudo nano /etc/mysql/my.cnf
Add this to the end of the file
[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
我的查询 运行 在服务器上非常好,我的意思是在我的生产服务器上...