使用MySQL,创建视图,SQL语句如下
SELECT
`n`.`id` AS `novelID`,
`n`.`name` AS `novelName`,
`n`.`info` AS `introduction`,
group_concat(`t`.`name` SEPARATOR ',') AS `novelType`,
`n`.`author` AS `author`,
`e`.`attr` AS `attr`,
`e`.`value` AS `value`,
(
CASE `n`.`isfinish`
WHEN 0 THEN
'连载中'
ELSE
'完结'
END
) AS `isFinish`
FROM
(
(
`novel` `n`
LEFT JOIN `novel_expand` `e` ON ((`e`.`id` = `n`.`id`))
)
LEFT JOIN `tag` `t` ON ((`e`.`value` = `t`.`id`))
)
GROUP BY
`n`.`id`,
`e`.`attr`
在运行时,出现下面错误
Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'novel.n.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
网上出现较多的解决办法:
1.查询mysql 相关mode
select @@global.sql_mode;
可以看到模式中包含了ONLY_FULL_GROUP_BY,只要没有这个配置即可。
我的Mysql版本是8.0.11,默认是带了ONLY_FULL_GROUP_BY模式。
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2.重设模式值
set @@global.sql_mode=`STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION`;
3.重启Mysql即可
但,我的按照这个流程试了很多遍,无法去掉“ONLY_FULL_GROUP_BY”,执行set方法会出现下面错误。
后来在网上看到一篇文章,是修改my.ini,后面跟着改,结果可行。具体方法如下:
1.在my.ini文件中添加下面一句
[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
2.重启mysql服务